在尝试实现System Call
之后,我对Linux完全感到困惑:D
Linux Kernel API
,System Calls
,System Interfaces
和GNU 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_open
和open
),依此类推......
我的问题是:
Linux Kernel API
,System Calls
,System Interfaces
和GNU C Library
之间有什么区别?
我应该使用哪种功能,我不应该使用哪种功能?
哦!我忘记了C standard library
:)
答案 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用于在内核中编程,例如用于编写驱动程序或提供新的系统调用。