【问题标题】:why we use unix system interface in c programming? [closed]为什么我们在 c 编程中使用 unix 系统接口? [关闭]
【发布时间】:2017-10-05 11:59:22
【问题描述】:

R&K C 编程指南中有关于 UNIX 系统函数的部分。

read()write()open()等系统调用,而我们可以使用scanf()printf()fopen()或其他c库函数来做同样的工作。

那么我们需要什么 C 库函数来代替它们?

为什么我们需要在 C 编程中了解和使用 UNIX 系统函数,而我们在 C 库中拥有这些函数?

【问题讨论】:

  • 句子以大写字母开头。我还有一个反问。为什么你想知道的东西更少?这听起来像是一种有缺陷的思维方式。

标签: c unix


【解决方案1】:

函数read, write, ... 更原始,并提供对操作系统的直接读/写。 fread, fwrite, ... 为这些原始函数实现更方便的缓冲接口。然而,便利是有代价的。例如,异步输入/输出不适用于这些功能。也没有等同于select。如果您需要这些功能,则别无选择。

【讨论】:

    【解决方案2】:

    标准库中的函数为您的程序提供了一个独立于操作系统的接口,让系统为您执行任务。所以它们不是特定于 UNIX 的,尽管它们首先出现在许多 UNIX 实现中,因为那是当时事实上的操作系统(不包括 IBM360、霍尼韦尔 GCOS 和其他大型机/迷你操作系统)。

    【讨论】:

    • 这回答了为什么库函数可能是首选,但这如何回答 OP 的问题,“为什么我们需要在 C 编程中了解和使用 UNIX 系统函数?”
    • @DavidBowling 出于一个原因,在严格符合 C 代码中您无法执行某些操作 - 例如确定文件的大小。
    【解决方案3】:

    Unix 有像write() 这样的系统调用,它们被像printf() 这样的库函数用于格式化和更舒适的使用。 printf() 以某种方式使用write(),有时我们想以另一种方式使用它,这就是为什么熟悉read(), write()open() 会有所帮助的原因。也就是说,在大多数情况下,printf() 会比write() 更适合写作。

    另外,请阅读this

    【讨论】:

    • UNIX是C语言写的,printf()怎么可能使用write()函数?
    • @arianpress how is it possible that printf() uses write() function? 通过在不使用printf() 函数的情况下实现支持printf() 的操作系统部分。我承认这是一个非常简短的总结,但它足够接近以帮助理解它是如何完成的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2021-10-30
    相关资源
    最近更新 更多