我在Linux系统中使用过socket()的手册页,我想知道它记录的函数属于什么。 例如,函数int socket(int domain, int type, int protocol)。该函数是glibc的一部分吗?它是Linux内核的直接部分吗?手册标题LinuxProgrammer's Manual。 我希望得到解释和澄清。
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条答案
按热度按时间j5fpnvbx1#
手册页中有4组有关C函数的文档(请参见
man 1 man
):这些都在手册页的第3节中。
例如:
man 3 printf
。该页面记录了glibc(或您使用的任何C库)提供的函数。注意:它记录了
printf()
的glibc版本,以及它与可能定义该函数的任何标准的所有偏差。这些在手册页的第3 p节中。
例如:
man 3p socket
。该页面记录了socket()
函数的POSIX定义。它可能与系统的实际实现不同。注:POSIX文档包含在Debian系统的
manpages-posix-dev
和manpages-posix
包中。这些是手册页第2节中定义的大部分页面。
这些函数由内核实现,glibc提供了一个 Package 函数,这样你就不必使用
syscall(SYS_socket, ...)
来调用它。例如:
man 2 socket
。该页记录了socket()
的内核实现。它可能与socket(3p)
不同。这些是手册页第2节中定义的一些页面。
例如:
man 2 membarrier
。这些函数由内核实现。
手册页会注意到没有glibc Package 器,因此您应该调用
syscall(SYS_membarrier, ...)
:hrirmatl2#
经过我小小的研究
C POSIX library
是用于POSIX
系统的C标准库,包含许多ANSI C
标准的附加函数,其中大多数函数用于处理某些极端用途的操作系统(多线程实现、联网(包括任何类型的通信(例如IPC))、用户权限管理等)。例如,
GNU/Linux
操作系统与POSIX
兼容,因此glibc
实现了C POSIX library standard
(POSIX
libc
),其中包含了所有附加函数和头文件,以及使用Linux系统调用的Linux实现。在我们的例子中,Linux开发人员手册页中介绍的套接字文档属于加州大学,伯克利(这种形式的套接字和现代网络的开发者)。因为POSIX已经"采用"了Berkeley "s套接字,并在其C标准库中包含了头文件
sys/socket.h
,则GNU/Linux
系统在其C标准库(称为一米一米一。因此,套接字的文档实际上记录了
glibc
函数,这些函数与POSIX的套接字函数完全兼容,而POSIX的套接字函数与Berkeley的套接字函数兼容。非常感谢那些帮助过我的人!
顺便说一句:欢迎任何其他的答案。