// libc bindings: // https://www.man7.org/linux/man-pages/man2/.2.html // The buffers are int-versions of zero-terminated strings. // int buf = aryu8.str0("some_file"); // buf mode perm-> fd { i64 i32 i32 -> i32 } open = "C"; // buf perm -> fd { i64 i32 -> i32 } creat = "C"; // fd buf len -> len { i32 i64 u32 -> i32 } write = "C"; // fd buf len -> len { i32 i64 u32 -> i32 } read = "C"; // fd -> err { i32 -> i32 } close = "C"; // path -> err { i64 -> i32 } unlink = "C"; i32 O_RDONLY = 0; i32 O_WRONLY = 1; i32 O_RDWR = 2; i32 O_CREAT = 512; // 02000 on x86_64-pc-cygwin i32 O_TRUNC = 1024; // 04000 on x86_64-pc-cygwin i32 STDIN = 0; i32 STDOUT = 1; i32 STDERR = 2; // status { i32 -> i32 } _exit = "C"; // errno is not an ordinary C data symbol; read it through the native runtime. { i32 } simple_errno = "C"; val errno = { -> simple_errno(); }; // addr len prot flags fd off -> void* { i64 i64 i32 i32 i32 i32 -> i64 } mmap = "C"; // mmap flags i32 PROT_EXEC = 4; i32 PROT_READ = 1; i32 PROT_WRITE= 2; i32 PROT_NONE = 0; i32 MAP_PRIVATE = 2; i32 MAP_ANON = 32;