C库函数中的系统调用

system call in C library function

由于 C 的任何库函数(例如 printf()) 进行的系统调用都是 OS 依赖的,这是否意味着我们对不同的 OS 有不同的函数 printf() ?

如果你的意思是“printf 在不同的 OS 上表现不同”,那么答案是:

  • 外部(从功能的用户角度)不,它的语义是标准化的。这意味着对此类函数的给定调用会导致相同的结果,无论 OS.
  • 是什么
  • 可能在内部,它的实施是免费的。这意味着,这样的函数为生成结果而真正进行的计算可能会有所不同。

这要看你对"different"的定义了,因为我能想到至少三个层次的区别:

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

C 标准提出了一个接口,这个接口应该得到全面的尊重。这意味着对于任何带有 C 标准库的 OS,OS 应该向您的程序显示一个名为 printf 的出口,并且如果您的程序插入它,它可以预期它的行为如下记录在案。这意味着,对于您所关心的,printf 是完全相同的。

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

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

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