“Linux Kernel API”,“系统调用”,“系统接口”和“GNU C库”之间有什么区别?

时间:2013-06-20 17:21:17

标签: c++ c linux

在尝试实现System Call之后,我对Linux完全感到困惑:D

Linux Kernel APISystem CallsSystem InterfacesGNU C Library之间有什么区别?

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

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

系统界面

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 Kernel APISystem CallsSystem InterfacesGNU C Library之间有什么区别? 我应该使用哪种功能,我不应该使用哪种功能?

哦!我忘记了C standard library:)

1 个答案:

答案 0 :(得分:9)

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

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

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

    使用此系统界面可以实现C库。例如,可以使用putc系统调用文件描述符write来实现C库中的1

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

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