Linux程序员手册的文档记录了什么?

wecizke3  于 2023-02-11  发布在  Linux
关注(0)|答案(2)|浏览(147)

我在Linux系统中使用过socket()的手册页,我想知道它记录的函数属于什么。
例如,函数int socket(int domain, int type, int protocol)。该函数是glibc的一部分吗?它是Linux内核的直接部分吗?手册标题LinuxProgrammer's Manual。
我希望得到解释和澄清。

j5fpnvbx

j5fpnvbx1#

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

  • 库调用(除系统调用 Package 器之外的所有库函数;大多数libc函数):

这些都在手册页的第3节中。
例如:man 3 printf。该页面记录了glibc(或您使用的任何C库)提供的函数。
注意:它记录了printf()的glibc版本,以及它与可能定义该函数的任何标准的所有偏差。

  • POSIX函数定义:

这些在手册页的第3 p节中。
例如:man 3p socket。该页面记录了socket()函数的POSIX定义。它可能与系统的实际实现不同。
注:POSIX文档包含在Debian系统的manpages-posix-devmanpages-posix包中。

  • 使用libc Package 器的系统调用:

这些是手册页第2节中定义的大部分页面。
这些函数由内核实现,glibc提供了一个 Package 函数,这样你就不必使用syscall(SYS_socket, ...)来调用它。
例如:man 2 socket。该页记录了socket()的内核实现。它可能与socket(3p)不同。

  • 没有libc Package 器的系统调用:

这些是手册页第2节中定义的一些页面。
例如:man 2 membarrier
这些函数由内核实现。
手册页会注意到没有glibc Package 器,因此您应该调用syscall(SYS_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).
hrirmatl

hrirmatl2#

经过我小小的研究

C POSIX library是用于POSIX系统的C标准库,包含许多ANSI C标准的附加函数,其中大多数函数用于处理某些极端用途的操作系统(多线程实现、联网(包括任何类型的通信(例如IPC))、用户权限管理等)。
例如,GNU/Linux操作系统与POSIX兼容,因此glibc实现了C POSIX library standardPOSIXlibc),其中包含了所有附加函数和头文件,以及使用Linux系统调用的Linux实现。
在我们的例子中,Linux开发人员手册页中介绍的套接字文档属于加州大学,伯克利(这种形式的套接字和现代网络的开发者)。因为POSIX已经"采用"了Berkeley "s套接字,并在其C标准库中包含了头文件sys/socket.h,则GNU/Linux系统在其C标准库(称为一米一米一。
因此,套接字的文档实际上记录了glibc函数,这些函数与POSIX的套接字函数完全兼容,而POSIX的套接字函数与Berkeley的套接字函数兼容。
非常感谢那些帮助过我的人!
顺便说一句:欢迎任何其他的答案。

相关问题