首页 文章

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

提问于
浏览
1

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

Linux Kernel APISystem CallsSystem InterfacesGNU 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_openopen ),依此类推......

我的问题是:

Linux Kernel APISystem CallsSystem InterfacesGNU C Library 之间有什么区别?我应该使用哪个功能,哪个功能我不应该使用?

哦!我忘了 C standard library :)

1 回答

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

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

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

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

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

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

相关问题