【发布时间】:2013-07-30 07:51:35
【问题描述】:
gcc (GCC) 4.7.2
c89
是否可以检查文件是否已经关闭?
我已使用fopen() 打开一个文件并使用fclose(fd) 关闭。
此文件在程序运行期间被打开和关闭。但是,用户可以通过ctrl-c 来终止程序。
当我执行清理例程时,我不知道文件是处于打开状态还是关闭状态。因此,如果我尝试执行 fclose(fd) 两次,它将堆栈转储。
我一直在抛出的一些想法:
- 为文件添加一个状态以打开或关闭,然后检查该状态,这意味着对于这样一个简单的工作需要更多的工作。
- 不要做任何事情,因为操作系统会在程序结束时自动清理。
- 是否有访问功能,但这只会检查模式。
非常感谢,
【问题讨论】:
-
添加状态(第一个选项)会添加竞争条件,除非您在状态与文件同步时屏蔽 Ctrl+C 信号。
-
关闭后为什么不能将
fd(strange name, btw) 设置为NULL? -
它与 libc(通常是 Glibc,但也可能是 musl-libc 等)的关系比与编译器的关系更大。
-
有一个状态变量
#defined 为OPEN和CLOSE。每当您在代码中调用fopen时,将状态设置为Current_State = OPEN;,当您在代码中调用fclose时,将状态设置为Current_State = CLOSE;并在需要时使用该current_state变量。