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

时间:2012-04-19 11:55:29

标签: c file stat

打开文件后写:

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

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

 stat( "./file", info);

或者我应该更好:

 fflush(file);

 fclose(file);

预先?

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

3 个答案:

答案 0 :(得分:2)

fopen manual page说:

  

如果模式为w,wb,a,ab,w +,wb +,w + b,a +,ab +或a + b,则文件为   以前没有,成功完成后,fopen()   function应标记为更新st_atime,st_ctime和st_mtime   文件的字段以及父级的st_ctime和st_mtime字段   。目录

所以我认为在成功的fopen调用之后对文件进行统计是安全的。

答案 1 :(得分:1)

是的,从逻辑上讲,我们可以做到。打开用于在只读文件系统中写入的文件失败。这表明fopen()/ open()确实需要检查。其他确认方法是打开文件,其中 x类似于open()的O_EXCL标志。

答案 2 :(得分:1)

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

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

在有可能发生系统崩溃的情况下,您需要抓住一些关于刷新磁盘的几次。在这种情况下,如果您未使用fsync之类的内容将数据完全提交到磁盘,则下次系统重启时可能会丢失数据。