operating-system - 打开文件的不同实现

标签 operating-system system-calls

我正在阅读《高尔文的操作系统概念》一书,遇到以下说法:

File open can be implemented in any of two ways:

  1. Some system open files when it is referenced first time. And closes them, once the job is done.
  2. Some other systems allow application programmers to specify a order such as open-read/write-close in application itself."

我看到 Linux/Windows 的 C 程序遵循第二种方法。
  • 有第一种方法的例子吗?
  • 为什么那些系统使用第一种方法?
  • 最佳答案

    在理解这两种实现及其优缺点时,我认为在这里概括是有用的:

  • 从文件概念泛化到真正考虑任何获取的资源;和
  • 从操作系统提供的内容概括到所使用的编程语言、库或框架也提供的内容。

  • 至于为什么系统可以使用第一种方法......

    答案同样适用于为什么您可能想要使用像 RAII 这样的编程习惯。 . IE。您是想自己对资源进行生命周期管理,还是希望它为您完成。

    有时,当为我们(我们作为程序员)完成生命周期管理时,我们可能会失去做我们想做的事情的能力(如果我们自己实现生命周期管理,这些事情可能会发生)。有时更重要的是不能泄露资源,而不是能够访问它的每一个花里胡哨。

    以 C++ 中的内存管理为例。我们可以使用 new 从系统分配内存或者我们可以调用 std::make_shared .然而,前者要求我们也调用 delete (在使用结束时)如果我们想确保内存不泄漏。同时,Java 并没有让程序员直接访问分配内存,而是使用垃圾收集,以便 "programmers can be spared the burden of having to perform manual memory management" .

    至于第一种方法的例子......

    许多类 Unix 操作系统为 syslog 提供编程接口(interface)。设施。虽然它在 openlog 中具有类似打开和关闭的类比和 closelog ,调用这些是可选的。可以直接调用syslog启动系统记录文本。

    标准输入和输出也同样为我们管理。当一个程序启动时,它通常已经打开并提供了这些概念。当它退出时,这些流将为我们关闭(根据需要)。程序无需调用fclose(stdout) (也不是 fopen("/dev/console") 之类的东西)。程序只需调用fputsfgets使用 stdoutstdin .

    关于operating-system - 打开文件的不同实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194643/

    相关文章:

    c - getrlimit() 返回错误值?

    c - 将空程序参数 vector 传递给 execve() 是否合法?

    c - 为什么 "read"必须是在 "Kernel Mode"中运行的系统调用?

    android - 如何检测背景音乐播放

    c++ - Open() 系统调用文件描述器

    仅 Java 操作系统

    c - 我的代码有什么问题吗? (打印存档文件内的文件名)

    unix - 在哪里可以获得UNIX系统调用的列表?

    C open() 为路径字符串返回 -1

    c++ - 多进程打开同一个文件导致文件操作失败