diff --git a/mod.zig b/mod.zig index 90588bae432312a7d8cdc6b7a47c714c007043b0..dbdc68abbe550874933c967094c02fbb966ffd41 100644 --- a/mod.zig +++ b/mod.zig @@ -334,7 +334,13 @@ pub const clone = @compileError("TODO: clone"); // fork // pid_t fork(void); // asmlinkage long sys_fork(void); -pub const fork = @compileError("TODO: fork"); +pub fn fork() errno.Error!pid_t { + const r = syscall0(.fork); + return switch (_errno(r)) { + .ok => @intCast(r), + _ => |c| errno.errorFromInt(@intFromEnum(c)), + }; +} // vfork // pid_t vfork(void); diff --git a/test.zig b/test.zig index 4ac00678f4935b29ac72f40847dd9b65a81e78fd..022f3355d132fff459230dc296eec86ed0520e19 100644 --- a/test.zig +++ b/test.zig @@ -10,4 +10,5 @@ test { _ = &linux.sched_yield; _ = &linux.pause; _ = &linux.getpid; + _ = &linux.fork; }