2

打开文件进行写入后:

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

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

 stat( "./file", info);

或者我应该更好:

 fflush(file);

或者

 fclose(file);

预先?

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

4

3 回答 3

2

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 调用成功后对文件进行统计是安全的。

于 2012-04-19T12:02:26.813 回答
1

是的,从逻辑上讲,我们可以做到。由于打开文件以写入只读文件系统失败。这表明 fopen()/open() 进行了必需的检查。其他确认的方法是通过打开与open() 的 O_EXCL 标志类似的 x文件。

于 2012-04-19T12:10:00.263 回答
1

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

因此,在这种特殊情况下不需要anfflush或 an 。fclose

有几次你需要对刷新到磁盘感到头疼的时候是有可能发生系统崩溃的时候。在这种情况下,如果您没有使用类似的方式将数据完全提交到磁盘fsync,那么下次系统重新启动时可能会丢失数据。

于 2012-04-19T12:17:14.310 回答