c++ - "Linux Kernel API"、 "System Calls"、 "System Interfaces"和 "GNU C Library"有什么区别?

标签 c++ c linux

<分区>

在尝试实现一个系统调用之后,我对 Linux 完全感到困惑 :D

Linux 内核 API系统调用系统接口(interface)GNU C 库 之间有什么区别?

我找到了每个项目的这些链接:

Linux 内核 API

https://www.kernel.org/doc/htmldocs/kernel-api.html

Linux 系统调用

http://syscalls.kernelgrok.com/

http://lxr.free-electrons.com/source/arch/x86/syscalls/syscall_32.tbl

系统接口(interface)

http://pubs.opengroup.org/onlinepubs/9699919799/idx/functions.html

GNU C 库

http://www.gnu.org/software/libc/manual/html_node/index.html

我对这些功能感到困惑。

例如sprintf存在于Linux Kernel API中,但是System Interfaces函数列表也包含这个函数。某些函数不应在内核模式下使用(例如 printf)。许多函数使用不同的名称执行相同的任务(例如 sys_openopen),等等...

我的问题是:

Linux 内核 API系统调用系统接口(interface)GNU C 库 之间有什么区别? 我应该使用哪个功能,不应该使用哪个功能?

哦!我忘记了 C 标准库 :)

最佳答案

  • C 库实现了 C 语言标准。这是通过调用特定于操作的函数来完成的,例如,用于写入标准输出。 C 库可以并且已经在许多系统上实现,例如 Linux、Windows、DOS 和各种微 Controller 。

    术语“GNU C 库”大概是指 C 库的特定实现,可能是 GNU 编译器集合附带的实现。

  • 操作系统公开了一个标准接口(interface),在 Linux 中是通过系统调用完成的。因此,例如,写入标准输出是通过调用 write 系统调用完成的。 Linux(以及更普遍的 Posix)围绕系统调用提供了一个 C 库,以方便使用。

    使用此系统接口(interface)可以实现 C 库。例如,C 库中的 putc 可以通过对文件描述符 1write 系统调用来实现。

    MS Windows 提供了一个类似的系统 API,称为 Windows API。它也可用于实现 C 库。

  • 内核 API 用于内核内部编程,例如用于编写驱动程序,或用于提供新的系统调用。

关于c++ - "Linux Kernel API"、 "System Calls"、 "System Interfaces"和 "GNU C Library"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17219898/

相关文章:

c++ - Cmake 找不到 Boost 文件夹

c++ - 彩色复选框、组框等

c - 即使按 y 或 no 后我也无法退出此循环

linux - Shell命令将逗号分隔的字符串转换为双引号逗号分隔的字符串

linux - 使用特定数据包/我自己的数据包 ping 一个端口

php - 尝试使用 https 连接时,在 xampp linux 中更改 Web 根目录会出现错误 403

c++ - 如何在没有安装 Qt 本身的情况下运行 Qt 程序?

c++ - 你如何在 C++ 中四舍五入小数位?

将 float 转换为字节数组的 C 函数

c - 在代数符号中为上三角矩阵分配空间