mirror of
https://github.com/ziglang/zig.git
synced 2024-11-27 07:32:44 +00:00
92 lines
2.2 KiB
Zig
92 lines
2.2 KiB
Zig
const std = @import("../std.zig");
|
|
const builtin = @import("builtin");
|
|
|
|
pub const syscall_bits = switch (builtin.cpu.arch) {
|
|
.x86_64 => @import("plan9/x86_64.zig"),
|
|
else => @compileError("more plan9 syscall implementations (needs more inline asm in stage2"),
|
|
};
|
|
pub const SYS = enum(usize) {
|
|
SYSR1 = 0,
|
|
_ERRSTR = 1,
|
|
BIND = 2,
|
|
CHDIR = 3,
|
|
CLOSE = 4,
|
|
DUP = 5,
|
|
ALARM = 6,
|
|
EXEC = 7,
|
|
EXITS = 8,
|
|
_FSESSION = 9,
|
|
FAUTH = 10,
|
|
_FSTAT = 11,
|
|
SEGBRK = 12,
|
|
_MOUNT = 13,
|
|
OPEN = 14,
|
|
_READ = 15,
|
|
OSEEK = 16,
|
|
SLEEP = 17,
|
|
_STAT = 18,
|
|
RFORK = 19,
|
|
_WRITE = 20,
|
|
PIPE = 21,
|
|
CREATE = 22,
|
|
FD2PATH = 23,
|
|
BRK_ = 24,
|
|
REMOVE = 25,
|
|
_WSTAT = 26,
|
|
_FWSTAT = 27,
|
|
NOTIFY = 28,
|
|
NOTED = 29,
|
|
SEGATTACH = 30,
|
|
SEGDETACH = 31,
|
|
SEGFREE = 32,
|
|
SEGFLUSH = 33,
|
|
RENDEZVOUS = 34,
|
|
UNMOUNT = 35,
|
|
_WAIT = 36,
|
|
SEMACQUIRE = 37,
|
|
SEMRELEASE = 38,
|
|
SEEK = 39,
|
|
FVERSION = 40,
|
|
ERRSTR = 41,
|
|
STAT = 42,
|
|
FSTAT = 43,
|
|
WSTAT = 44,
|
|
FWSTAT = 45,
|
|
MOUNT = 46,
|
|
AWAIT = 47,
|
|
PREAD = 50,
|
|
PWRITE = 51,
|
|
TSEMACQUIRE = 52,
|
|
_NSEC = 53,
|
|
};
|
|
|
|
pub fn pwrite(fd: usize, buf: [*]const u8, count: usize, offset: usize) usize {
|
|
return syscall_bits.syscall4(.PWRITE, fd, @ptrToInt(buf), count, offset);
|
|
}
|
|
|
|
pub fn open(path: [*:0]const u8, omode: OpenMode) usize {
|
|
return syscall_bits.syscall2(.OPEN, @ptrToInt(path), @enumToInt(omode));
|
|
}
|
|
|
|
pub fn create(path: [*:0]const u8, omode: OpenMode, perms: usize) usize {
|
|
return syscall_bits.syscall3(.CREATE, @ptrToInt(path), @enumToInt(omode), perms);
|
|
}
|
|
|
|
pub fn exits(status: ?[*:0]const u8) void {
|
|
_ = syscall_bits.syscall1(.EXITS, if (status) |s| @ptrToInt(s) else 0);
|
|
}
|
|
|
|
pub fn close(fd: usize) usize {
|
|
return syscall_bits.syscall1(.CLOSE, fd);
|
|
}
|
|
pub const OpenMode = enum(usize) {
|
|
OREAD = 0, //* open for read
|
|
OWRITE = 1, //* write
|
|
ORDWR = 2, //* read and write
|
|
OEXEC = 3, //* execute, == read but check execute permission
|
|
OTRUNC = 16, //* or'ed in (except for exec), truncate file first
|
|
OCEXEC = 32, //* or'ed in (per file descriptor), close on exec
|
|
ORCLOSE = 64, //* or'ed in, remove on close
|
|
OEXCL = 0x1000, //* or'ed in, exclusive create
|
|
};
|