[英]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.