【发布时间】:2023-03-14 23:38:01
【问题描述】:
UNIX 上的系统调用列表在哪里?
这不是我最初的问题,但无论如何谢谢:)
【问题讨论】:
-
这里的问题是什么——“一些系统调用列表在哪里?”或“我如何确定....系统调用?”。无论哪种情况,我们都需要知道您的目标平台是什么,然后才能回答问题。编辑:我已将您的问题编辑为前者,如果您指的是后者,请同时编辑问题正文和标题。
标签: unix freebsd system-calls
UNIX 上的系统调用列表在哪里?
这不是我最初的问题,但无论如何谢谢:)
【问题讨论】:
标签: unix freebsd system-calls
在 FreeBSD 中,查找系统调用的最佳位置是在文件 /usr/src/sys/sys/syscall.h 中。这是在 FreeBSD 9.0 上
【讨论】:
对于官方、权威的 IEEE 标准。 1003.1 / Single UNIX Specification (UNIX 2004) 联机帮助页,请参阅:
full list of functions (system interfaces) 可以在“系统接口”下或链接中找到。我还想借此机会插入我的Development / Coding Search 自定义搜索引擎,该引擎包括并严重偏向单一 UNIX 规范/IEEE 标准。 1003.1。例如,对于fopen、close、unix 等的标准搜索,都会进行促销,以确保来自权威文档的结果位于最顶部。在查询前添加“man”会大大增加结果的权重,有利于 IEEE 标准。 1003.1 手册页,如 man find、man free、man inttypes.h 等,尽管大多数查询应该支持 IEEE Std。 1003.1 即使不添加“man”(如果不是,请输入 bad query 并告诉我)。
【讨论】:
在大多数环境中,ls /usr/man/2/ 可以解决问题,尽管它可能是 /usr/local/man 或 /usr/share/man 甚至是 /usr/local/share/man。
编辑:甚至可能有一个 MANPATH 环境变量将您指向正确的位置。
【讨论】:
ls /usr/man/2/ 给我ls: /usr/man/2/: No such file or directory。
man 2 syscalls
除此之外,您还可以查看 /usr/include/sys/syscall.h(在我的系统上仅 #includes /usr/include/bits/syscall.h)。这是在 libc 构建时从内核系统调用列表生成的。
您还可以 grep SYSCALL_DEFINE 的 Linux 内核源代码。 (我不是 BSD 专家,但我认为 FreeBSD 中的等价物是 SYSCALL_MODULE)
【讨论】:
man 2 syscalls 给我No entry for syscalls in section 2 of the manual。
manpages-dev。
究竟是什么操作系统?手册第 2 节记录了系统调用,但完整的集合取决于您使用的 UNIX 风格。
POSIX.1 定义了一套标准的操作系统接口,但是没有操作系统将自己限制在这些接口上。一般来说,您有 BSD 和 SYSV 风格,它们的语义略有不同。然而,现在所谓的系统调用实际上是准库函数。
唯一正确的答案需要特定的安装和文件检查
/usr/include/syscall.h
【讨论】:
您真正应该做的是拿起 W. Richard Stevens 的“Unix 环境中的高级编程”。这是一本关于如何编写类 Unix 操作系统的经典书。这本书很旧,MacOs/iPhoneOs 是不同的最传统的 Unix 风格,但是这本书是学习基础知识和了解 API 应该如何使用的好方法。查看Amazon
【讨论】:
阅读Fine手册。对于系统调用,以
开头man 2 intro
这就是我开始使用 UNIX 的方式。那时我们还没有花哨的互联网……
【讨论】: