【发布时间】:2020-01-04 04:01:25
【问题描述】:
我对这两个有点困惑,所以这是我的问题;
Linux 手册页项目列出了所有这些功能: https://www.kernel.org/doc/man-pages/
以recvfrom 为例,该函数既作为Linux 系统调用存在,也作为C 库函数存在。他们的文档似乎不同,但都可以使用#include <sys/socket.h> 访问。
我不明白他们的区别?
我还认为系统调用是使用可以直接在汇编中实现的十六进制值定义的,它们的列表在这里: https://syscalls.kernelgrok.com/
但是我在上面的链接中找不到recvfrom。在这一点上,我对 Linux 系统调用和 C lib 函数有点困惑!
编辑:补充问题,很多功能都在 (3) 之下,但不在 (2) 之下,即clean。这是否意味着这些都是由 C 运行时直接完成的,而不依赖于系统调用和底层操作系统?
【问题讨论】:
-
我猜你的困惑的根源是你已经安装了
manpages-posix-dev或类似的包,它正在安装第 3 节中标准规范的联机帮助页格式版本。 -
它们在那里是因为你安装了它们,而 POSIX/susv4 不知道“系统调用”,只有“接口”。该标准在
isatty()之类的库函数或read()之类的系统调用包装器之间没有区别。 -
@josh 检查
posix_madvise(3)/madvise(2)和操作POSIX_MADV_DONTNEED/MADV_DONTNEED。 Kinda 解释了两个部分之间的关系。 -
我没有安装任何东西,我只是在看上面的网页。
-
那个 syscalls.kernelgrok 网页是关于 i386 的,它现在已经成为历史。您系统上的
syscall(2)和syscalls(2)手册页有更重要的信息,包括一个很好的表格,其中包含如何传递参数以及在 linux 支持的每个平台上使用的指令。
标签: c linux system-calls