打开文件的不同实现

时间:2015-03-22 12:58:34

标签: operating-system system-calls

我正在阅读高尔文的书#34;操作系统概念"并遇到以下声明:

  

文件打开可以通过以下两种方式实现:

     
      
  1. 某些系统在第一次引用时打开文件。一旦工作完成,就关闭它们。
  2.   
  3. 其他一些系统允许应用程序员在应用程序本身中指定诸如open-read / write-close之类的命令。"
  4.   

我看到Linux / Windows的C程序遵循第二种方法。

  • 有第一种方法的例子吗?
  • 为什么这些系统使用第一种方法?

1 个答案:

答案 0 :(得分:0)

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

  1. 从文件概念推广以考虑任何获得的资源;和
  2. 概括了操作系统提供的内容,以及所使用的编程语言,库或框架所提供的内容。
  3. 至于为什么系统可以使用第一种方法......

    答案同样适用于您可能想要使用RAII等编程习惯用语的原因。即你想对资源进行自己的生命周期管理,还是希望它为你完成。

    有时当我们(我们作为程序员)完成生命周期管理时,我们可能会失去做我们想要的事情的能力(如果我们自己实施生命周期管理,那么这些事情可能是可能的)。有时,无法泄漏资源比获取每个铃铛和吹口哨更重要。

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

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

    许多类Unix操作系统为syslog工具提供了编程接口。虽然openlogcloselog中的打开关闭类似,但调用它们是可选的。只需简单地调用syslog即可启动系统日志文本。

    我们也管理类似的标准输入和输出。当程序启动时,它通常已经打开并可用这些概念。当它退出时,这些流将为我们关闭(必要时)。程序不需要致电fclose(stdout)(也不需要fopen("/dev/console"))。程序只需使用fputsfgets致电stdoutstdin