在尝试实现 System Call
之后,我对Linux完全感到困惑:D
Linux Kernel API
, System Calls
, System Interfaces
和 GNU C Library
之间有什么区别?
我找到了每个项目的链接:
The Linux Kernel API
https://www.kernel.org/doc/htmldocs/kernel-api.html
Linux System Calls
http://syscalls.kernelgrok.com/
http://lxr.free-electrons.com/source/arch/x86/syscalls/syscall_32.tbl
System Interfaces
http://pubs.opengroup.org/onlinepubs/9699919799/idx/functions.html
The GNU C Library
http://www.gnu.org/software/libc/manual/html_node/index.html
我对这些功能感到困惑 .
例如, sprintf
中存在 sprintf
,但 System Interfaces
函数列表也包含此函数 . 某些功能不应在内核模式下使用(例如 printf
) . 许多函数使用不同的名称执行相同的任务(例如 sys_open
和 open
),依此类推......
我的问题是:
Linux Kernel API
, System Calls
, System Interfaces
和 GNU C Library
之间有什么区别?我应该使用哪个功能,哪个功能我不应该使用?
哦!我忘了 C standard library
:)
1 回答
术语“GNU C库”可能是指C库的特定实现,也许是GNU编译器集合附带的实现 .
write
系统调用来写入标准输出 . Linux(以及更普遍的Posix)在系统调用周围提供了一个C库,以方便使用 .使用此系统界面可以实现C库 . 例如,可以使用
write
系统调用文件描述符1
来实现C库中的putc
.MS Windows提供了一个类似的系统API,称为Windows API . 它也可用于实现C库 .