INTRO - Linux手册页
Linux程序员手册 第2部分
更新日期: 2019-08-02
名称
简介-系统调用简介
说明
本手册的第2节介绍了Linux系统调用。系统调用是Linux内核的入口点。通常,系统调用不直接调用:相反,大多数系统调用具有相应的C库包装函数,这些函数执行调用系统调用所需的步骤(例如,捕获到内核模式)。因此,进行系统调用看起来与调用普通库函数相同。
在许多情况下,C库包装器功能仅做以下事情:
- *
- 将参数和唯一的系统调用号复制到内核期望它们的寄存器中;
- *
- 陷入内核模式,此时内核完成了系统调用的实际工作;
- *
- 如果系统调用在内核将CPU返回到用户模式时返回错误号,则设置errno。
但是,在某些情况下,包装函数可能做的还不止这些,例如,在陷入内核模式之前对参数进行一些预处理,或者对系统调用返回的值进行后处理。在这种情况下,第2节中的手册页通常会尝试记录(通常是GNU)C库API接口和原始系统调用的详细信息。最常见的是,主要的DESCRIPTION将集中在C库接口上,并且在NOTES部分中涵盖了系统调用的差异。
有关Linux系统调用的列表,请参见syscalls(2)。
返回值
发生错误时,大多数系统调用都会返回负错误号(即errno(3)中描述的常量之一的取反值)。 C库包装程序向调用方隐藏了此详细信息:当系统调用返回负值时,包装程序将绝对值复制到errno变量中,并返回-1作为包装程序的返回值。
成功的系统调用返回的值取决于调用。许多系统调用成功都会返回0,但是有些系统调用可以返回非零值。有关详细信息,请参见各个手册页。
在某些情况下,程序员必须定义一个功能测试宏,以便从手册页"摘要"部分中指定的头文件中获取系统调用的声明。 (在需要时,必须在包括任何头文件之前定义这些功能测试宏。)在这种情况下,所需的宏在手册页中进行了描述。有关功能测试宏的更多信息,请参见feature_test_macros(7)。
遵循规范
某些术语和缩写用于表示本节中的调用所遵循的UNIX变体和标准。参见标准(7)。
备注
Calling directly
在大多数情况下,没有必要直接调用系统调用,但是在某些情况下,Standard C库无法为您实现漂亮的包装函数。在这种情况下,程序员必须使用syscall(2)手动调用系统调用。从历史上看,使用_syscall(2)中描述的_syscall宏之一也是可行的。
Authors and copyright conditions
在手册页源的标题中查找作者和版权条件。请注意,这些内容在页面之间可能会有所不同!
另外参见
_syscall(2),syscall(2),syscalls(2),errno(3),intro(3),功能(7),凭据(7),feature_test_macros(7),mq_overview(7),path_resolution(7), pipe(7),pty(7),sem_overview(7),shm_overview(7),signal(7),socket(7),standards(7),symlink(7),sysvipc(7),time(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。