Linux 程序员手册的文档记录了什么?
What the documentation of Linux Programmer's Manual is documenting?
我在我的 Linux 系统中使用过 socket() 的手册页,我想知道它记录的函数属于什么。
例如函数int socket(int domain, int type, int protocol)
。是 glibc 的功能部分吗?它是 Linux 内核的直接部分吗?手册的标题 Linux 程序员手册。
我很想得到解释和澄清。
经过我的研究:
C POSIX library
,它是 POSIX
系统的 C 标准库,包含许多 ANSI C
标准的附加功能,其中大部分与操作系统有关对于某些极端用途(多线程实现、网络(包括任何类型的通信(例如 IPC))、用户权限管理等)
例如,GNU/Linux
操作系统与 POSIX
兼容,因此 glibc
正在实施 C POSIX library standard
(POSIX
libc
),其中包含所有附加功能和 headers 及其使用 Linux 系统调用的 Linux 实现。
在我们的案例中,Linux 的开发人员手册页中介绍的套接字文档属于加州大学伯克利分校(这种形式的套接字和一般现代网络的开发人员)。因为 POSIX 已经“采用”了 Berkeley 的套接字并在其 C 标准库中包含了 header sys/socket.h
,所以 GNU/Linux
系统在其称为 glibc
.
因此,套接字文档实际上记录了 glibc
函数,这些函数与 POSIX 的套接字函数完全兼容,后者与 Berkeley 的函数兼容。
非常感谢帮助过的人!
顺便说一句:欢迎任何其他答案。
手册页中有 4 组 C 函数文档(参见 man 1 man
):
库调用(除系统调用包装器外的所有库函数;
大多数 libc 函数):
这些在手册页的第 3 节中。
示例:man 3 printf
。
该页面记录了 glibc 提供的功能
(或您使用的任何 C 库)。
注意:它记录了 printf()
的 glibc 版本,
与任何标准的所有偏差
也可以定义函数。
POSIX函数定义:
这些在手册页的第 3p 节中。
示例:man 3p socket
。
该页面记录了 socket()
函数的 POSIX 定义。
它可能与您系统的实际实现不同。
注意:POSIX 文档在包中
manpages-posix-dev
和 manpages-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).
我在我的 Linux 系统中使用过 socket() 的手册页,我想知道它记录的函数属于什么。
例如函数int socket(int domain, int type, int protocol)
。是 glibc 的功能部分吗?它是 Linux 内核的直接部分吗?手册的标题 Linux 程序员手册。
我很想得到解释和澄清。
经过我的研究:
C POSIX library
,它是 POSIX
系统的 C 标准库,包含许多 ANSI C
标准的附加功能,其中大部分与操作系统有关对于某些极端用途(多线程实现、网络(包括任何类型的通信(例如 IPC))、用户权限管理等)
例如,GNU/Linux
操作系统与 POSIX
兼容,因此 glibc
正在实施 C POSIX library standard
(POSIX
libc
),其中包含所有附加功能和 headers 及其使用 Linux 系统调用的 Linux 实现。
在我们的案例中,Linux 的开发人员手册页中介绍的套接字文档属于加州大学伯克利分校(这种形式的套接字和一般现代网络的开发人员)。因为 POSIX 已经“采用”了 Berkeley 的套接字并在其 C 标准库中包含了 header sys/socket.h
,所以 GNU/Linux
系统在其称为 glibc
.
因此,套接字文档实际上记录了 glibc
函数,这些函数与 POSIX 的套接字函数完全兼容,后者与 Berkeley 的函数兼容。
非常感谢帮助过的人!
顺便说一句:欢迎任何其他答案。
手册页中有 4 组 C 函数文档(参见 man 1 man
):
库调用(除系统调用包装器外的所有库函数; 大多数 libc 函数):
这些在手册页的第 3 节中。
示例:
man 3 printf
。 该页面记录了 glibc 提供的功能 (或您使用的任何 C 库)。注意:它记录了
printf()
的 glibc 版本, 与任何标准的所有偏差 也可以定义函数。POSIX函数定义:
这些在手册页的第 3p 节中。
示例:
man 3p socket
。 该页面记录了socket()
函数的 POSIX 定义。 它可能与您系统的实际实现不同。注意:POSIX 文档在包中
manpages-posix-dev
和manpages-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).