Commit 2f6b045fb1

data-man <datamanrb@gmail.com>
2019-12-06 02:29:23
Add std.os.getrusage
1 parent 62bebda
Changed files (3)
lib
lib/std/os/bits/linux.zig
@@ -1453,3 +1453,26 @@ pub const MFD_HUGE_512MB = HUGETLB_FLAG_ENCODE_512MB;
 pub const MFD_HUGE_1GB = HUGETLB_FLAG_ENCODE_1GB;
 pub const MFD_HUGE_2GB = HUGETLB_FLAG_ENCODE_2GB;
 pub const MFD_HUGE_16GB = HUGETLB_FLAG_ENCODE_16GB;
+
+pub const RUSAGE_SELF = 0;
+pub const RUSAGE_CHILDREN = -1;
+pub const RUSAGE_THREAD = 1;
+
+pub const rusage = extern struct {
+    utime: timeval,
+    stime: timeval,
+    maxrss: isize,
+    ix_rss: isize,
+    idrss: isize,
+    isrss: isize,
+    minflt: isize,
+    majflt: isize,
+    nswap: isize,
+    inblock: isize,
+    oublock: isize,
+    msgsnd: isize,
+    msgrcv: isize,
+    nsignals: isize,
+    nvcsw: isize,
+    nivcsw: isize,
+};
lib/std/os/linux.zig
@@ -1114,6 +1114,10 @@ pub fn memfd_create(name: [*:0]const u8, flags: u32) usize {
     return syscall2(SYS_memfd_create, @ptrToInt(name), flags);
 }
 
+pub fn getrusage(who: i32, usage: *rusage) usize {
+    return syscall2(SYS_getrusage, @bitCast(usize, @as(isize, who)), @ptrToInt(usage));
+}
+
 test "" {
     if (builtin.os == .linux) {
         _ = @import("linux/test.zig");
lib/std/os.zig
@@ -3325,3 +3325,14 @@ pub fn memfd_create(name: []const u8, flags: u32) !fd_t {
     const name_t = try toMemFdPath(name);
     return memfd_createC(&name_t, flags);
 }
+
+pub fn getrusage(who: i32) rusage {
+    var result: rusage = undefined;
+    const rc = system.getrusage(who, &result);
+    switch (errno(rc)) {
+        0 => return result,
+        EINVAL => unreachable,
+        EFAULT => unreachable,
+        else => unreachable,
+    }
+}