我在Linux系统中使用过socket()的手册页,我想知道它所记录的功能属于什么。
例如,函数int socket(int domain, int type, int protocol)
。函数是glibc的一部分吗?它是否以某种方式直接成为Linux内核的一部分?该手册的标题为 Linux 程序员手册。
我想得到一个解释和澄清。
答案 0 :(得分:0)
经过我的细心研究:
C POSIX library
是POSIX
系统的C标准库,它包含ANSI C
标准的众多附加功能,其中大多数功能与某些操作系统有关。极为有用(多线程实现,联网(包括任何类型的通信(例如IPC)),用户权限管理等)
例如,GNU/Linux
操作系统与POSIX
兼容,因此glibc
正在实现C POSIX library standard
(POSIX
{{1} }),其中包含所有其他功能和标头,以及使用Linux的系统调用在Linux中实现的标头。
在我们的案例中,Linux的开发人员手册页中介绍的套接字文档属于加利福尼亚大学伯克利分校(通常以这种形式的套接字和现代网络进行开发)。因为POSIX已“采用”了伯克利的套接字,并且在其C标准库中包含了头文件libc
,所以sys/socket.h
系统在称为GNU/Linux
的C标准库中实现了它。
因此,套接字的文档实际上记录了glibc
函数,这些函数与POSIX的套接字函数完全兼容,而POSIX的套接字函数与Berkeley兼容。
非常感谢帮助过的人!
顺便说一句:欢迎其他答案。
答案 1 :(得分:0)
手册页中有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-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).