#include "xsys.h" #define PUB __attribute__((visibility("default"))) /* WASM export */ static void check_status(sys_ret r, const char* contextmsg); static void print(const char* str); void write_file(const char* path, const void* data, usize len) { sys_fd fd = create(path, 0666); check_status(fd, "create"); isize n = write(fd, data, len); check_status(n, "write"); sys_ret status = close(fd); check_status(status, "close"); print("created file "); print(path); print("\n"); } void read_file(const char* path, void* buf, usize cap) { print("read_file begin\n"); sys_fd fd = open(path, sys_open_ronly, 0); check_status(fd, "open"); isize readlen = read(fd, buf, cap); check_status(readlen, "read"); sys_ret status = close(fd); check_status(status, "close"); print("read from file "); print(path); print(": "); write(SYS_FD_STDOUT, buf, readlen); if (readlen > 0 && ((u8*)buf)[readlen - 1] != '\n') print("\n"); } PUB int main(int argc, const char** argv) { print("before sys_sleep\n"); sys_sleep(0, 200000000); // 200ms print("after first sleep\n"); sys_sleep(0, 200000000); print("done sleeping\n"); const char* path = "hello.txt"; u8* buf[64]; read_file("/sys/uname", buf, sizeof(buf)); const char* message = "Helloj wörld\n"; write_file(path, message, strlen(message)); read_file(path, buf, sizeof(buf)); return 0; } static void print(const char* str) { write(SYS_FD_STDOUT, str, strlen(str)); } static void printerr(const char* str) { write(SYS_FD_STDERR, str, strlen(str)); } static void check_status(sys_ret r, const char* contextmsg) { if (r < 0) { sys_err err = (sys_err)-r; const char* errname = sys_errname(err); printerr("error: "); printerr(errname); if (contextmsg && strlen(contextmsg)) { printerr(" ("); printerr(contextmsg); printerr(")\n"); } else { printerr("\n"); } exit(1); } }