打開一個文件進行寫操作後:在調用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