系统调用C库函数

时间:2015-02-24 15:29:52

标签: c operating-system system-calls

由于系统调用C的任何库函数(比如printf())所依赖的操作系统依赖于操作系统,这是否意味着我们对不同的操作系统有不同的函数printf()?

2 个答案:

答案 0 :(得分:2)

这取决于你对"不同"的定义,因为我至少可以想到三个不同的层次:

  • 界面差异
  • 高级代码差异
  • 机器代码差异

C标准提出了一个界面,这个界面应该得到全面尊重。这意味着对于具有C标准库的任何操作系统,操作系统应该向您的程序显示一个名为printf的插座,如果您的程序插入它,它可以期望它的行为与记录一致。这意味着,对于您所关注的所有人而言,printf是全面的。

这并不意味着printf必须是每个标准库中的同一段代码。如果有人告诉我写一个printf函数并告诉你写一个printf函数,我们可以有一个不同的方法,只要我们都尊重记录的行为,这仍然会很好。事实上,出于版权原因,您可以确定Windows printf的代码与Linux的printf代码不同。

最后,即使使用相同的源代码,printf也必须不同以适应平台差异。例如,您不能期望x86 printf能够在ARM上运行。正如您所指出的,由于平台约定和系统调用差异,您无法期望Linux printf能够在Windows上运行。

因此printf出口背后的机器代码会有所不同,但标准的要点是使其工作原理相同。

答案 1 :(得分:1)

如果你的意思是" printf在不同的操作系统和#34;上表现不同,那么答案是:

  • 外部(从功能角度的用户)不,它的语义是标准化的。这意味着无论操作系统如何,对这种功能的给定调用都会产生相同的结果。
  • 内部可能,其实施是免费的。这意味着,这样一个函数真正能够产生结果的计算可能会有所不同。