我正在阅读《高尔文的操作系统概念》一书,遇到以下说法:
File open can be implemented in any of two ways:
- Some system open files when it is referenced first time. And closes them, once the job is done.
- 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")
之类的东西)。程序只需调用fputs
或 fgets
使用 stdout
或 stdin
.
关于operating-system - 打开文件的不同实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194643/