我正在阅读高尔文的书#34;操作系统概念"并遇到以下声明:
文件打开可以通过以下两种方式实现:
- 某些系统在第一次引用时打开文件。一旦工作完成,就关闭它们。
- 其他一些系统允许应用程序员在应用程序本身中指定诸如open-read / write-close之类的命令。"
醇>
我看到Linux / Windows的C程序遵循第二种方法。
答案 0 :(得分:0)
在理解这两个实现及其优点/缺点时,我认为在这里进行概括是有用的:
至于为什么系统可以使用第一种方法......
答案同样适用于您可能想要使用RAII等编程习惯用语的原因。即你想对资源进行自己的生命周期管理,还是希望它为你完成。
有时当我们(我们作为程序员)完成生命周期管理时,我们可能会失去做我们想要的事情的能力(如果我们自己实施生命周期管理,那么这些事情可能是可能的)。有时,无法泄漏资源比获取每个铃铛和吹口哨更重要。
以C ++中的内存管理为例。我们可以使用new
从系统分配内存,或者我们可以调用std::make_shared
。如果我们想要确保内存不泄漏,前者要求我们也调用delete
(在其使用结束时)。同时,Java并没有让程序员直接访问分配内存,而是使用垃圾收集来"programmers can be spared the burden of having to perform manual memory management"。
关于第一种方法的例子......
许多类Unix操作系统为syslog
工具提供了编程接口。虽然openlog
和closelog
中的打开和关闭类似,但调用它们是可选的。只需简单地调用syslog
即可启动系统日志文本。
我们也管理类似的标准输入和输出。当程序启动时,它通常已经打开并可用这些概念。当它退出时,这些流将为我们关闭(必要时)。程序不需要致电fclose(stdout)
(也不需要fopen("/dev/console")
)。程序只需使用fputs
或fgets
致电stdout
或stdin
。