【问题标题】:What the documentation of Linux Programmer's Manual is documenting?Linux Programmer's Manual 的文档记录了什么?
【发布时间】:2020-12-13 12:13:41
【问题描述】:

我在我的 Linux 系统中使用过 socket() 的手册页,我想知道它记录的函数属于什么。

例如,函数int socket(int domain, int type, int protocol)。函数是 glibc 的一部分吗?它是否以某种方式直接成为 Linux 内核的一部分?手册的标题 Linux 程序员手册。

我很想得到解释和澄清。

【问题讨论】:

  • 这是一个 Unix 系统调用。 libc 提供了允许从 C/C++ 调用它的 API。
  • 您通常可以从手册部分看出。 man socket 将向您显示 socket(2) 即它在手册的第 2 节中。有关部分列表,请参阅man man。第 1 节记录独立命令,2 节是系统调用,3 个用户空间库(如果没有提到,则为 libc),第 5 节描述磁盘上的配置文件。
  • 您的意思是说,手册在任何其他类 Unix 操作系统中显示通用的伯克利套接字 API(它是 libc)并且实现取决于机器?例如,如果我在使用 Debian 时将使用该函数,它将使用 glibc(its libc) 作为函数实现和 Linux 系统调用?

标签: linux linux-kernel documentation glibc manpage


【解决方案1】:

手册页中有 4 组 C 函数文档(参见 man 1 man):

  • 库调用(所有库函数,不包括系统调用包装器; 大多数libc函数):

    这些在手册页的第 3 节中。

    例如:man 3 printf。 该页面记录了 glibc 提供的功能 (或您使用的任何 C 库)。

    注意:它记录了 printf() 的 glibc 版本, 与任何标准的所有偏差 也可以定义函数。

  • POSIX 函数定义:

    这些在手册页的第 3p 部分。

    例如:man 3p socket。 该页面记录了 socket() 函数的 POSIX 定义。 它可能与您系统的实际实现有所不同。

    注意:软件包中的 POSIX 文档 com manpages-posix-devmanpages-posix 在 Debian 系统中。

  • 使用 libc 包装器的系统调用:

    这些是手册页第 2 节中定义的大部分页面。

    这些功能由内核实现, 并且 glibc 提供了一个包装函数,以便 您不必使用例如调用它syscall(__NR_socket, ...).

    例如:man 2 socket。 该页面记录了socket() 的内核实现。 它可能与socket(3p) 不同。

  • 没有 libc 包装器的系统调用:

    这些是手册页第 2 节中定义的一些页面。

    例如:man 2 membarrier

    这些功能由内核实现。

    手册页会注意到没有 glibc 包装器, 所以你应该打电话给syscall(__NR_membarrier, ...):

MEMBARRIER(2)          Linux Programmer's Manual         MEMBARRIER(2)

NAME
       membarrier - issue memory barriers on a set of threads

SYNOPSIS
       #include <linux/membarrier.h>

       int membarrier(int cmd, unsigned int flags, int cpu_id);

       Note:  There  is  no  glibc  wrapper  for this system call; see
       NOTES.
[...]

NOTES
[...]
       Glibc  does not provide a wrapper for this system call; call it
       using syscall(2).

【讨论】:

    【解决方案2】:

    经过我的小研究:

    C POSIX libraryPOSIX 系统的 C 标准库,包含许多对 ANSI C 标准的附加功能,其中大部分用于处理一些极端用途的操作系统(多线程实现,网络(包括任何类型的通信(例如IPC))),用户权限管理等)

    例如,GNU/Linux 操作系统与POSIX 兼容,因此glibc 正在实现C POSIX library standard(POSIX libc),其中包含其所有附加功能和标头及其使用 Linux 的系统调用的 Linux 实现。

    在我们的例子中,Linux 开发人员手册页中介绍的套接字文档属于加州大学伯克利分校(通常是这种形式的套接字和现代网络的开发人员)。因为 POSIX 已经“采用”了 Berkeley 的套接字,并且在其 C 标准库中包含了标头 sys/socket.h,所以 GNU/Linux 系统在其称为 glibc 的 C 标准库中实现它。

    因此,套接字的文档实际上记录了与伯克利兼容的 POSIX 套接字函数完全兼容的 glibc 函数。

    非常感谢帮助过的人!

    顺便说一句:欢迎任何其他答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-18
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多