1

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

Linux Kernel API,System CallsSystem 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_openopen)执行相同的任务,等等......

我的问题是:

Linux Kernel API,System CallsSystem Interfaces和有什么区别GNU C Library?我应该使用哪个功能,我不应该使用哪个功能?

哦!我忘记了C standard library:)

4

1 回答 1

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 用于内核内部的编程,例如编写驱动程序或提供新的系统调用。

于 2013-06-20T17:25:00.633 回答