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

Ami*_*yan 1 c c++ linux

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

是什么区别Linux Kernel API,System Calls,System 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 API,System Calls,System InterfacesGNU 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用于在内核内编程,例如用于编写驱动程序或用于提供新的系统调用.