_SYSCALL - Linux手册页
时间:2019-08-20 17:58:34 来源:igfitidea点击:
Linux程序员手册 第2部分
更新日期: 2020-06-09
名称
_syscall-调用不带库支持的系统调用(OBSOLETE)
语法
#包括
_syscall宏
所需的系统调用
说明
有关系统调用的重要信息是其原型。您需要知道多少个参数,它们的类型以及函数的返回类型。有七个宏可以简化对系统的实际调用。它们具有以下形式:
_syscallX(type,name,type1,arg1,type2,arg2,...)
哪里
- X为0-6,这是系统调用采用的参数数量
- type是系统调用的返回类型
- name是系统调用的名称
- typeN是第N个参数的类型
- argN是第N个参数的名称
这些宏使用您指定的参数创建一个名为name的函数。一旦在源文件中包含_syscall(),就可以按名称调用系统调用。
文件
/usr/include/linux/unistd.h
遵循规范
这些宏的使用特定于Linux,并且已弃用。
备注
从内核2.6.18开始,从提供给用户空间的头文件中删除了_syscall宏。请改用syscall(2)。 (某些体系结构,尤其是ia64,从未提供_syscall宏;在这些体系结构上,始终需要syscall(2)。)
_syscall()宏不会产生原型。您可能必须创建一个,尤其是对于C ++用户。
不需要系统调用仅返回正或负错误代码。您需要阅读源代码以确保它将如何返回错误。通常,它是标准错误代码(例如-EPERM)的负数。 _syscall()宏将在r为非负数时返回系统调用的结果r,但在r为负数时将返回-1并将变量errno设置为-r。有关错误代码,请参见errno(3)。
定义系统调用时,参数类型必须按值或按指针传递(对于诸如结构之类的集合)。
示例
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <linux/unistd.h> /* for _syscallX macros/related stuff */ #include <linux/kernel.h> /* 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); }
Sample output
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
另外参见
简介(2),系统调用(2),错误(3)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。