在尝试实现之后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:)
Ker*_* SB 10
C库实现了C语言标准.这可以通过调用特定于操作的函数来完成,例如,用于写入标准输出.C库可以并且已经在许多很多系统上实现,例如Linux,Windows,DOS和各种微控制器.
术语"GNU C库"可能是指C库的特定实现,也许是GNU编译器集合附带的实现.
操作系统公开了一个标准接口,在Linux中通过系统调用完成.因此,例如,通过调用write系统调用来写入标准输出.Linux(以及更普遍的Posix)围绕系统调用提供了一个C库,以方便使用.
使用此系统界面可以实现C库.例如,putc从C库可以实现与write系统调用文件描述符1.
MS Windows提供了一个类似的系统API,称为Windows API.它也可用于实现C库.
内核API用于在内核内编程,例如用于编写驱动程序或用于提供新的系统调用.