打开文件进行写入后:
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
将从内核缓冲区获取文件。
因此,在这种特殊情况下不需要fflush
或fclose
。
您需要为刷新到磁盘而挠头的几次是系统崩溃的可能性。在这种情况下,如果您尚未使用类似 fsync
之类的内容将数据完全提交到磁盘,则下次系统重新启动时可能会丢失数据。