打开一个文件进行写操作后:在调用stat之前,我需要刷新还是关闭文件?
FILE *file = fopen("./file", "w");
我可以假设文件被立即创建?它是安全的呼吁:
stat("./file", info);
或者我应该更好:
fflush(file);
或
fclose(file);
事先?
编辑:fopen的调用后,假设非空文件
打开一个文件进行写操作后:在调用stat之前,我需要刷新还是关闭文件?
FILE *file = fopen("./file", "w");
我可以假设文件被立即创建?它是安全的呼吁:
stat("./file", info);
或者我应该更好:
fflush(file);
或
fclose(file);
事先?
编辑: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调用后对文件进行统计是安全的。
嗯,我必须假设操作系统不需要设置并坚持inode在这一点上? – Ynv 2012-04-19 12:21:44
是的,逻辑上我们可以做到。由于在只读文件系统中打开用于写入的文件失败。这表明fopen()/ open()需要检查。其他确认方法是通过打开文件x类似于open()的O_EXCL标志。
嗯,首先,肯定检查'file!= NULL'。如果它是'NULL',则没有文件。我无法回答其他部分。 – Matej 2012-04-19 11:57:51
当文件仍然打开时,您可以执行'fstat(fileno(file),&info);' – 2012-04-19 11:59:32
fstat看起来像是一种可能性,我无法找到它是否能够保证从文件读取inode描述符将是存储在磁盘上的描述符。 – Ynv 2012-04-19 12:06:47