diff --git a/phymem_netbsd.go b/phymem_netbsd.go new file mode 100644 index 0000000..cd71c7a --- /dev/null +++ b/phymem_netbsd.go @@ -0,0 +1,41 @@ +package phymem + +/* +#include +#include +#include +#include + +static int +getRSS(void) +{ + int ret; + size_t len; + + struct kinfo_proc2 kp; + int mib[] = {CTL_KERN, KERN_PROC2, KERN_PROC_PID, getpid(), sizeof(kp), 1}; + size_t miblen = __arraycount(mib); + len = sizeof(kp); + ret = sysctl(mib, miblen, &kp, &len, NULL, 0); + if (ret < 0) { + return -1; + } + + long pagesize = sysconf(_SC_PAGESIZE); + + return kp.p_vm_rssize * pagesize; +} +*/ +import "C" +import "fmt" + +// for test. +const providedCurrent = true + +func Current() (uint, error){ + rss := int(C.getRSS()) + if rss < 0 { + return 0, fmt.Errorf("failed to get RSS via sysctl: %d", rss) + } + return uint(rss), nil +}