/** * Authors: * $(LINK2 https://github.com/FreeSlave, Roman Chistokhodov). * License: * $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0). * Copyright: * Roman Chistokhodov 2015 */ module resusage.common; package: import std.process : thisProcessID; version(Windows) { import core.sys.windows.windows; import std.windows.syserror; extern(Windows) @nogc DWORD GetProcessId(in HANDLE Process) @system nothrow; extern(Windows) @nogc HANDLE OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId) @system nothrow; private enum PROCESS_QUERY_INFORMATION = 0x0400; @trusted HANDLE openProcess(int pid) { return wenforce(OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, pid), "Could not open process"); } } else version(linux) { import core.sys.posix.sys.types; import core.sys.posix.unistd; import core.sys.linux.config; import core.stdc.stdio : FILE, fopen, fclose, fscanf; import std.conv : to; import std.string : toStringz; immutable(char*) procSelf = "/proc/self/stat"; @system const(char)* procOfPid(int pid) { return toStringz("/proc/" ~ to!string(pid) ~ "/stat"); } }