【问题标题】:system call in C library functionC库函数中的系统调用
【发布时间】:2015-04-26 07:28:21
【问题描述】:

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

【问题讨论】:

    标签: c operating-system system-calls


    【解决方案1】:

    这取决于你对“不同”的定义,因为我能想到至少三个层次的区别:

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

    C 标准建议一个接口,并且这个接口应该得到全面尊重。这意味着对于任何带有 C 标准库的操作系统,操作系统应该向您的程序显示一个名为 printf 的插座,并且如果您的程序插入其中,它可以预期它的行为与记录的一样。这意味着对于您所关心的所有人来说,printf 都是相同的。

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

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

    所以printf 出口后面的机器码会有所不同,但标准的重点是让它工作相同。

    【讨论】:

    • 那么在现实中,我们在 windows 和 linux 中是否有不同的 printf() 函数代码??
    • 是的,它们的实现不同。
    【解决方案2】:

    如果您的意思是“printf 在不同操作系统上的行为不同”,那么答案是:

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

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 2020-01-04
      • 2016-02-09
      • 1970-01-01
      • 2011-02-09
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多