C语言 在调用 stat 之前,我是否需要刷新或关闭文件



打开文件进行写入后:

FILE *file = fopen("./file", "w");

我可以假设文件是立即创建的吗?打电话安全吗:

 stat( "./file", info);

或者我应该更好:

 fflush(file);

 fclose(file);

事先?

编辑:在fopen调用后假设非NULL 文件

fopen手册页说:

如果模式为 w、wb、a、ab、w+、wb+、w+b、a+、ab+ 或 a+b,并且文件 以前不存在,成功完成后,fopen() 功能应标记更新st_atime、st_ctime和st_mtime 文件的字段以及父文件的st_ctime和st_mtime字段 目录。

所以我认为在成功的 fopen 调用后立即统计文件是安全的。

是的,从逻辑上讲,我们可以做到。由于打开文件以写入只读文件系统失败。这表明 fopen()/open() 执行了所需的检查。另一种确认方法是打开带有 x 的文件,类似于 open() 的标志O_EXCL

如果对fopen的调用成功,则表示文件已创建。文件可能不会提交(刷新)到磁盘。但是您不必担心这一点,因为下一次调用 stat 将从内核缓冲区获取文件。

因此,在这种特殊情况下不需要fflushfclose

您需要为刷新到磁盘而挠头的几次是系统崩溃的可能性。在这种情况下,如果您尚未使用类似 fsync 之类的内容将数据完全提交到磁盘,则下次系统重新启动时可能会丢失数据。

最新更新