系统调用有man(2)页面,但这些页面描述了位于系统调用之上的C库(glibc)的行为。原始系统调用API / ABI是否记录在某处(UseTheSourceLuke除外)?我在手册页中看到了一些内核/ libc之间的差异,但我并不认为记录这些差异是最重要的。
我真正要说的是:CIC库是否被POLICY视为稳定/记录的Linux API,并且内核的系统调用API / ABI被认为是不稳定的(可能会更改),因此无意或无意低优先级?
那么改变系统调用的内核开发人员会在glibc中做出变通方法吗?那么其他libc呢?
我可以找到关于这个主题的历史讨论吗?
编辑:所以ABI是稳定的,也是系统调用的行为,但是内核开发人员没有记录它们。 glibc正在记录它们(有自己的添加/更改)。正确的吗?
答案 0 :(得分:3)
我不认为内核开发人员实际发布了中断API,但您可以找到第三方图表,如this one。
答案 1 :(得分:2)
syscall man page中您的问题的答案是。特别注意章节标题"架构呼叫约定"并注意到John Bollinger上面提到的,这些信息可能因内核版本而异。
答案 2 :(得分:0)
我真正要说的是:CIC库是否被POLICY视为稳定/记录的Linux API,并且内核的系统调用API / ABI被认为是不稳定的(可能会更改),因此无意或无意低优先级?
如果未指定的政策, ,则无法与政策对话。
人们为" Linux"编程通常实际上是为一种或多种GNU / Linux编程,而不是裸内核。因此,我倾向于说我们可能没有考虑内核开发者政策。实际上,如果C库接口完全可用,那么我们就不会讨论裸内核了。此外,根据您的标记,我假设您正在询问C编程。如果您使用汇编编程,则原始系统调用界面将是自然且适当的,并且我的大部分其他注释将不适用。
如果你确实将GNU / Linux作为目标而排除其他任何东西,那么问题就有点明智了。另一方面,通常情况下,人们更愿意为更广泛的兼容性进行编程。在这种情况下,除了使用C库系统调用接口之外别无选择,因为每个系统的原始系统调用都是不同的。 Glibc的系统调用接口可以很好地符合POSIX和SUS,因此使用它们(正确)对于可移植性来说是一个巨大的优势。即使其他Unix和类Unix系统(如OS X,BSD,Solaris等)不是直接目标,也很难在这些系统上保持使用软件的可能性。
无论如何,如果您决定让您的软件直接执行Linux系统调用,那么您是否确实会插入内联汇编来实现您想要的任何地方?当然不是 - 你会写包装函数。那么,为什么要反对使用C库已经提供的经过全面测试和详细记录的包装函数?
当然,Linux系统调用接口在某些程度上会在内核版本之间发生变化。这可以被视为使版本不同的东西(我的意思是x.2y
- > x.2z
或x.y
- > z.w
)。我没有很好地了解这些更改通常有多大,但过去发生了不兼容的更改,并且使用C库接口可以在一定程度上隔离这些更改。但是,如上所述,我认为更喜欢C库接口还有其他更大的原因。