繁体   English   中英

在linux中函数调用如read(),write()实际系统调用吗?

[英]Are function calls like read() , write() actual system calls in linux?

我一直用C / C ++编写程序,使用Linux API并进行系统调用,如fork(),read(),write()等。现在,我开始怀疑这些库函数是否实际上是系统调用,或者它们是某种包装函数。

当程序调用write()时会发生什么? 这个函数如何与内核交互? 如果这是一个包装,那么我们为什么需要呢?

所有这些函数都是libc.so中真正的用户空间函数,你的二进制文件是链接的。 但是大多数只是系统调用的小包装器,它们是用户空间和内核之间的接口(另请参阅syscall(2) )。

请注意,除了调用内核(如execl(3) )之外,纯粹用户空间(如fmod(3) )或在用户空间中执行某些操作的函数在第3节中有自己的联机帮助,而只调用内核的函数(如read(2) )将它们放在第2节中。

使用这个简单的代码:

int main()
{
    int f = open("/tmp/test.txt", O_CREAT | O_RDWR, 0666);
    write(f, "hello world", 11);
    close(f);

    return 0;
}

你可以使用strace来查找二进制文件中使用的系统调用:

gcc test.c -o test
strace ./test

结果是这样的:

.
.
.
open("/tmp/test.txt", O_RDWR|O_CREAT, 0666) = 3
write(3, "hello world", 11)             = 11
close(3)                                = 0
exit_group(0)                           = ?

至于fork() ,它实际上是clone()系统调用的包装器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM