我在我的Linux系统中使用了socket()的手册页面,我想知道它所记录的函数属于什么功能。
例如,函数int socket(int domain, int type, int protocol)。胶质细胞的功能部分吗?它是Linux内核的直接部分吗?手册的标题是Linux程序员手册。
我很想得到一个解释和澄清。
发布于 2020-08-25 11:56:02
我的小研究结束后的 :
C POSIX library是POSIX系统的C标准库,除了ANSI C标准之外,还包含了许多附加的功能,其中大多数都是为了一些极端的用途(多线程实现、网络(包括任何类型的通信(例如IPC))、用户权限管理等)而处理操作系统的。
例如,GNU/Linux操作系统与POSIX兼容,因此glibc正在实现C POSIX library standard(POSIX libc),其中包含所有附加函数和头部,并使用Linux的系统调用实现。
在我们的例子中,Linux手册中为开发人员引入的套接字文档属于加利福尼亚大学伯克利分校(这种类型的套接字和现代网络的开发人员)。由于POSIX“采用”了伯克利的套接字,并在其C标准库中包含了头sys/socket.h,所以GNU/Linux系统在其称为glibc的C标准库中实现了它。
因此,套接字的文档实际上记录了与POSIX的套接字函数完全兼容的glibc函数,后者与伯克利的套接字函数完全兼容。
非常感谢那些帮助你的人!
顺便说一句:欢迎其他答案。
发布于 2020-11-28 19:09:14
在手册页中有4组C函数文档(参见man 1 man):
这些内容载于手册第3节。
例子:man 3 printf.该页面记录由glibc (或您使用的任何C库)提供的函数。
注意:它记录了printf()的glibc版本,其中包含了所有可能也定义函数的标准偏差.。
这些内容载于手册第3p节。
例子:man 3p socket.该页面记录了socket()函数的POSIX定义。它可能与系统的实际实现不同。
注意: Debian系统中的manpages-posix-dev和manpages-posix包中的POSIX文档com .
使用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).https://stackoverflow.com/questions/63568081
复制相似问题