【问题标题】:How does C compiler decide whether to call library function or system callC编译器如何决定是调用库函数还是系统调用
【发布时间】:2012-05-17 15:12:30
【问题描述】:

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

【问题讨论】:

    标签: c function compiler-construction system-calls


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-01
        • 1970-01-01
        • 2011-04-02
        • 1970-01-01
        • 1970-01-01
        • 2017-04-12
        • 2015-04-26
        • 2012-09-27
        相关资源
        最近更新 更多