【问题标题】:History of syscalls added to Linux?添加到 Linux 的系统调用的历史?
【发布时间】:2011-10-11 10:37:40
【问题描述】:

我是否可以在任何地方获得每个系统调用所需的最低 Linux 版本的完整列表?我正在寻找“如果我使用 syscall X,我的代码可以在其上运行的最低 Linux 版本是多少?”形式的问题的一般答案

【问题讨论】:

  • 总有源头.... *邪恶的笑声*.
  • 您的意思是调用将以指定参数和预期行为在其上运行的最低版本的 linux? 邪恶的笑容
  • 我的意思是系统调用不会返回ENOSYS 的最低版本,或者它对无效系统调用号所做的任何事情。我了解某些系统调用在早期版本中的行为不完整或损坏,因此有关这方面的信息也很好,但超出了我最初问题的范围。 :-)
  • 如果要实际使用,最好有勘误表。 “实施”并不总是与“实施并体面地工作”相同。
  • @AmigableClarkKant:是的,但是如果你看看我的问题,(几乎?)所有没有接受答案的问题都是非常难的问题,要么还没有解决方案,要么没有解决方案是多种相互矛盾的意见作为答案,没有权威来源。 :-)

标签: c linux assembly system-calls


【解决方案1】:

此信息可在syscalls(2) 手册页中找到。对于那些没有指明内核版本的系统调用,系统调用出现在内核1.0或更早版本中。

【讨论】:

  • 到目前为止,这看起来是最好的答案。不知道我是怎么错过的。
【解决方案2】:

Linus 长期以来一直批评用户空间检查特定内核版本以了解功能是否可用 - 推荐的方法是测试您想要的功能(未实现的系统调用确实返回 ENOSYS)。

其中一个原因是版本号并不像看起来那么重要 - 大多数用户实际运行的分发内核通常具有从较新内核版本向后移植的功能。其中一些在这方面是真正的弗兰肯斯坦的怪物。

【讨论】:

  • 我询问的原因不是检查某个功能在运行时是否可用,而是估计我是否将自己锁定在可能相关的支持版本之外,具体取决于某些系统调用。
【解决方案3】:

在使用诸如http://linux.die.net/ 之类的网站时,您可以在 API 调用页面底部附近的“版本”部分找到此内容。例如 inotify 是在 Linux 2.6.13 中添加的。

对于 posix 调用,这将不适用,因为它们是根据 Posix 规范收集的,例如read 有一个“符合”部分提到 POSIX.1-2001。

【讨论】:

  • 确实,我现在正在寻找的是clock_gettime,其手册页未指定。
【解决方案4】:

在文件 include/asm-generic/unistd.h 中有一个系统调用列表。您可以在以下位置查看该文件的历史记录:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=history;f=include/asm-generic/unistd.h;h=2292d1af9d705f129ae523ce00a6b7794fb1648c;hb=8df54d622a120058ee8bec38743c9b8f091c8e58

我不确定 x86 以外的其他架构的系统调用。可能有细节。

【讨论】:

    猜你喜欢
    • 2014-10-10
    • 1970-01-01
    • 2018-09-15
    • 2013-04-25
    • 2014-12-30
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多