_syscall(2) System Calls Manual _syscall(2) _syscall - , () #include _syscall . , . , . : _syscallX(type,name,type1,arg1,type2,arg2,) X is 0-6, which are the number of arguments taken by the system call type -- name -- typeN -- N- argN -- N- name . _syscall() , name. /usr/include/linux/unistd.h Linux. Starting around Linux 2.6.18, the _syscall macros were removed from header files supplied to user space. Use syscall(2) instead. (Some architectures, notably ia64, never provided the _syscall macros; on those architectures, syscall(2) was always required.) _syscall() . , , , C++. . , . , , , -EPERM. _syscall() r , r , -1 errno -r, r . errno(3). ( , ). #include #include #include #include /* for _syscallX macros/related stuff */ #include /* for struct sysinfo */ _syscall1(int, sysinfo, struct sysinfo *, info); int main(void) { struct sysinfo s_info; int error; error = sysinfo(&s_info); printf("code error = %d\n", error); printf("Uptime = %lds\nLoad: 1 min %lu / 5 min %lu / 15 min %lu\n" "RAM: total %lu / free %lu / shared %lu\n" "Memory in buffers = %lu\nSwap: total %lu / free %lu\n" "Number of processes = %d\n", s_info.uptime, s_info.loads[0], s_info.loads[1], s_info.loads[2], s_info.totalram, s_info.freeram, s_info.sharedram, s_info.bufferram, s_info.totalswap, s_info.freeswap, s_info.procs); exit(EXIT_SUCCESS); } code error = 0 uptime = 502034s Load: 1 min 13376 / 5 min 5504 / 15 min 1152 RAM: total 15343616 / free 827392 / shared 8237056 Memory in buffers = 5066752 Swap: total 27881472 / free 24698880 Number of processes = 40 . intro(2), syscall(2), errno(3) Yuri Kozlov ; GNU 3 , . . , , . Linux man-pages 6.06 31 2023 . _syscall(2)