系统调用源码

系统调用源码

C 库提供了 write()、read()、open() 等函数,我们可以在 C 程序中使用它们来进行系统调用。在哪里可以找到这些函数的源代码?

答案1

这些是系统调用,由内核实现。您可以在 中找到read和。和所做的只是调用它们的版本,例如或,如下所示。writefs/read_write.creadwriteksysksys_readksys_write

SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)
{
    return ksys_read(fd, buf, count);
}
ssize_t ksys_read(unsigned int fd, char __user *buf, size_t count)
{
    struct fd f = fdget_pos(fd);
    // ...
}

fs/read_write.c

答案2

最近的 lwn 文章对内核端的系统调用有很好的深入和详细的描述:http://lwn.net/Articles/604287/

答案3

如果您想要标准 C 库的源代码,请查看提供的链接 @goldilocks。

如果你想要linux系统调用的源代码,你必须搜索linux源代码。系统调用在 Linux 源代码的许多位置都定义了。您可以 grep 查找字符串宏SYSCALL_DEFINE

grep -r -n SYSCALL_DEFINE /path/to/linux_source

其中一些你可以看到这里

答案4

在GNU的libc之后,您可以查看其他libc实现的源代码:

穆斯尔有在线源代码供浏览:大多数系统调用都是在这里

有人放了将 Libc 移植到 github 中。 不过,它被认为是非官方的。

相关内容