【问题标题】:Where can I obtain a list of UNIX system calls?我在哪里可以获得 UNIX 系统调用的列表?
【发布时间】:2023-03-14 23:38:01
【问题描述】:

UNIX 上的系统调用列表在哪里?

这不是我最初的问题,但无论如何谢谢:)

【问题讨论】:

  • 这里的问题是什么——“一些系统调用列表在哪里?”或“我如何确定....系统调用?”。无论哪种情况,我们都需要知道您的目标平台是什么,然后才能回答问题。编辑:我已将您的问题编辑为前者,如果您指的是后者,请同时编辑问题正文和标题。

标签: unix freebsd system-calls


【解决方案1】:

在 FreeBSD 中,查找系统调用的最佳位置是在文件 /usr/src/sys/sys/syscall.h 中。这是在 FreeBSD 9.0 上

【讨论】:

    【解决方案2】:

    对于官方、权威的 IEEE 标准。 1003.1 / Single UNIX Specification (UNIX 2004) 联机帮助页,请参阅:

    full list of functions (system interfaces) 可以在“系统接口”下或链接中找到。我还想借此机会插入我的Development / Coding Search 自定义搜索引擎,该引擎包括并严重偏向单一 UNIX 规范/IEEE 标准。 1003.1。例如,对于fopencloseunix 等的标准搜索,都会进行促销,以确保来自权威文档的结果位于最顶部。在查询前添加“man”会大大增加结果的权重,有利于 IEEE 标准。 1003.1 手册页,如 man findman freeman inttypes.h 等,尽管大多数查询应该支持 IEEE Std。 1003.1 即使不添加“man”(如果不是,请输入 bad query 并告诉我)。

    【讨论】:

      【解决方案3】:

      在大多数环境中,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
      • 在 FreeBSD 上(这被标记为 FreeBSD,对吗?)它是 /usr/share/man/man2:
      【解决方案4】:

      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
      • 您可能需要在系统上安装适当的软件包。在 Debian 和 Ubuntu 上,该软件包被命名为 manpages-dev
      • @Kinopiko 显然没有。
      • @sharth、@Ken Bloom,它们并不适用于所有 UNIX 实现。最好查阅权威规范(即 Open Group Base Specifications / IEEE Std. 1003.1)
      • @Michael 好点。有 UNIX 系统调用,然后是你的 UNIX 系统调用,它们是两个不同的东西。
      【解决方案5】:

      究竟是什么操作系统?手册第 2 节记录了系统调用,但完整的集合取决于您使用的 UNIX 风格。

      POSIX.1 定义了一套标准的操作系统接口,但是没有操作系统将自己限制在这些接口上。一般来说,您有 BSD 和 SYSV 风格,它们的语义略有不同。然而,现在所谓的系统调用实际上是准库函数。

      唯一正确的答案需要特定的安装和文件检查

       /usr/include/syscall.h
      

      【讨论】:

        【解决方案6】:

        您真正应该做的是拿起 W. Richard Stevens 的“Unix 环境中的高级编程”。这是一本关于如何编写类 Unix 操作系统的经典书。这本书很旧,MacOs/iPhoneOs 是不同的最传统的 Unix 风格,但是这本书是学习基础知识和了解 API 应该如何使用的好方法。查看Amazon

        【讨论】:

        • @Armentage,如果单一 UNIX 规范可以免费在线获得,您为什么要这样做?这本书(我有一本)只是对树木的一种可怜的浪费,印刷时几乎已经过时了。
        • 我没说他应该买新的纸质版。这本书可能有数千册,可以二手购买,从图书馆借来,或者从朋友那里借来。这是一本非常受人尊敬的书,它不仅仅是手册页的愚蠢印刷品。它包含一些简单的示例,说明您可以使用类似 unix 的操作系统进行哪些操作,对于第一次尝试使用它的人来说,这是一个很好的起点。
        【解决方案7】:

        阅读Fine手册。对于系统调用,以

        开头
        man 2 intro
        

        这就是我开始使用 UNIX 的方式。那时我们还没有花哨的互联网……

        【讨论】:

        • @Kinopiko:在烧木头的计算机时代已经足够好了。我们得到了半页常见的 UNIX 命令和一些提示,然后在实验室中自行解决。
        • 我应该警告说,安装在本地机器上的手册页可能具有特定于 UNIX 实现的特性。最好查阅规范中的手册页。
        • @Michael Aaron Safyan:我认为在大多数情况下,人们会在他们查阅手册页的 UNIX 实现下进行编程。但是,我同意您的观点,前提是这些特质会增加而不是更改规范。
        【解决方案8】:
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多