Linux中添加系统调用的历史?

28

我可以在哪里获取每个系统调用所需的最低Linux版本的完整列表? 我正在寻找这种形式的一般性答案:“如果我使用系统调用X,则我的代码可以运行的Linux的最低版本是什么?”


4
总是有来源......邪恶地笑*. - user166390
1
你的意思是指定参数并以期望的行为在上运行该调用所需的Linux最低版本?坏笑 - Karoly Horvath
1
我的意思是最低版本,使系统调用不返回“ENOSYS”或对于无效的系统调用号码所做的任何操作。 我了解一些系统调用在早期版本中具有不完整或破损的行为,因此关于此的信息也很有用,但超出了我最初问题的范围。 :-) - R.. GitHub STOP HELPING ICE
如果这个东西要真正使用,则最好还有勘误表。 “实现”并不总是意味着“实现并且正常运行”。 - Prof. Falken
@AmigableClarkKant:是的,但如果你看一下我的问题,(几乎?)所有没有被接受的答案都是非常困难的问题,要么还没有解决方案,要么就是有多个相互矛盾的意见作为答案,而没有权威来源。 :-) - R.. GitHub STOP HELPING ICE
@R..,啊,真是太好了。你是我的超级英雄。 - Prof. Falken
4个回答

32

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


3
目前看来这似乎是最佳答案。不知道一开始为什么错过了它。 - R.. GitHub STOP HELPING ICE

9

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

其中一个原因是版本号并不像它们看起来的那样重要-大多数用户实际运行的发行版内核通常从更新的内核版本中借鉴了一些特性。在这方面,有些内核甚至可以说是真正的弗兰肯斯坦怪物。


7
我提出这个问题并不是为了检查某个功能是否在运行时可用,而是为了估计依赖于某些系统调用是否会使我无法支持可能相关的版本。请注意保持原意,简洁易懂。 - R.. GitHub STOP HELPING ICE

4
当使用诸如http://linux.die.net/等网站时,在API调用页面的底部可以找到“版本”部分,例如inotify是在Linux 2.6.13中添加的。对于posix调用,这不适用,因为它们在Posix规范下收集,例如read有一个“符合”部分,提到了POSIX.1-2001。

2
实际上,我现在正在寻找的是 clock_gettime,但它的 man 手册没有详细说明。 - R.. GitHub STOP HELPING ICE

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接