我正在学习一些文件功能,因此有疑问。
我很好奇为什么有必要调用close()
来关闭文件?如果我在读/写文件后没有调用close()
,可能会发生什么?如果我打电话给close()
,我还可以使用文件描述符吗?
答案 0 :(得分:9)
如果文件背后有任何缓冲,并且您没有调用关闭,那么您可能会丢失数据。
如果操作系统资源有限(例如打开文件数),那么不关闭文件就会浪费系统资源。
文件关闭后使用描述符充其量是没有意义的,最糟糕的是大量错误(有点像在释放后使用内存)
答案 1 :(得分:3)
close()函数关闭程序和句柄标识的打开文件之间的连接。任何未写入的系统缓冲区都会刷新到磁盘,文件使用的系统资源将被释放
粗体部分是文件关闭的主要原因
关闭文件会产生以下后果:
1)取消分配文件描述符。
2)文件上进程拥有的任何记录锁都被解锁。
3)当关闭与管道或FIFO相关联的所有文件描述符时,将丢弃任何未读数据。
答案 2 :(得分:2)
如果您没有关闭为阅读而打开的文件,则可以阻止其进行并发写入。 如果你没有关闭为写入而打开的文件 - 你可以丢失操作系统在缓冲区中保存的最后写入的数据。
永远不要使用已经关闭的文件的描述符。这毫无意义。
答案 3 :(得分:0)
使用write()系统调用写入文件时,它不会立即写入文件。因此,在执行操作之后,必须调用close(),以便将缓冲区刷新到文件并继续更改。 调用close()后,您无法使用文件描述符。
答案 4 :(得分:0)
关闭文件: 完成文件后,必须使用函数fclose()关闭它。
fclose(ifp);
fclose(ofp);
关闭文件非常重要,尤其是对于输出文件。原因是输出经常被缓冲。这意味着当你告诉C写出一些东西时,例如,
fprintf(ofp, "Whatever!\n");
它不必立即写入磁盘,但最终可能会在内存中的缓冲区中结束。此输出缓冲区将暂时保留文本:
示例输出缓冲区:
----------------------------------------------
| a | b | c | W | h | a | t | e | v | e | r |
----------------------------------------------
| ! | \n | | | | | | | | | |
----------------------------------------------
| | | | | | | | | | | |
----------------------------------------------
| | | | | | | | | | | |
----------------------------------------------
...
(尽管有这样的图,缓冲区实际上只是一维的。)
当缓冲区填满时(或文件关闭时),数据最终写入磁盘。
答案 5 :(得分:0)