C编译器如何决定是调用库函数还是系统调用

时间:2012-05-17 15:12:30

标签: c function compiler-construction system-calls

我知道read是系统调用。但是当我阅读man 2 and man 3时,它会向我展示不同的解释。所以,我怀疑read有库函数和系统调用。在这种情况下,如果我在我的c程序中使用read,编译器是否会将读取视为library函数或system call请解释我这个混乱。

2 个答案:

答案 0 :(得分:6)

没有。系统调用存在于libc(C标准库)中,就像库函数一样。 libc中系统调用的实现只是“存根”,它调用特定于系统的调用内核的方法。

答案 1 :(得分:2)

我假设你在Linux上。在该平台上,联机帮助页read(2)描述了Linux系统调用,而read(3)描述了read的POSIX规范,如果您安装了POSIX联机帮助页。后者属于3类,因为POSIX没有指定系统调用和库函数之间的区别。

libc中只有一个read,它是(一个很薄的包装)系统调用。