#include #include #include "ckb_syscalls.h" #include "spawn_utils.h" uint64_t read_u64_le(const uint8_t* src) { return *(const uint64_t*)src; } int main() { int err = 0; uint64_t n = 0; uint8_t args[32] = {0}; n = countof(args); err = load_script_args(args, &n); CHECK(err); CHECK2(n == 32, ErrorCommon); uint64_t args_index = read_u64_le(&args[0x00]); uint64_t args_source = read_u64_le(&args[0x08]); uint64_t args_place = read_u64_le(&args[0x10]); uint64_t args_bounds = read_u64_le(&args[0x18]); printf("args.index = %llu", args_index); printf("args.source = %llu", args_source); printf("args.place = %llu", args_place); printf("args.bounds = %llu", args_bounds); const char* argv[] = {}; uint64_t pid = 0; uint64_t fds[2] = {0}; uint64_t inherited_fds[3] = {0}; err = create_std_fds(fds, inherited_fds); CHECK(err); spawn_args_t spgs = { .argc = countof(argv), .argv = argv, .process_id = &pid, .inherited_fds = inherited_fds, }; err = ckb_spawn(args_index, args_source, args_place, args_bounds, &spgs); CHECK(err); size_t length = 0; length = 12; err = ckb_write(fds[CKB_STDOUT], "Hello World!", &length); CHECK(err); err = ckb_close(fds[CKB_STDOUT]); CHECK(err); uint8_t buffer[1024] = {0}; length = 1024; err = ckb_read_all(fds[CKB_STDIN], buffer, &length); CHECK(err); CHECK2(length == 12, ErrorCommon); err = memcmp("Hello World!", buffer, length); CHECK(err); exit: return err; }