的fopen示例失敗文件被刪除後文件打開問題。的fopen狀態在VC
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
FILE * pFile;
for(int i=0; i < 1000000; i++)
{
bool ret = remove("C:\\abc.txt");
pFile = fopen ("C:\\abc.txt","w");
if (pFile!=NULL)
{
fputs ("fopen example",pFile);
fclose (pFile);
}
else
{
printf("%d fopen() fails \n", count);
}
}
return 0;
}
在此,刪除被調用,PFILE =的fopen( 「C:\的abc.txt」, 「W」)之後;被調用,
有時即使在C:\中,abc.txt文件在remove被調用後也不存在,但fopen pFile指針爲null。
這是一些不總是轉載。在這個例子中,這個問題被轉載50/60次。
請提出一些解決方案。
您是否嘗試過檢查errno變量?它可能會被系統設置爲一些錯誤代碼,這可能會幫助你解決這個問題,你可以使用perror來收集更多的信息。也看看http://pubs.opengroup.org/onlinepubs/009695399/functions/fopen.html – fjanisze 2014-10-27 09:15:39
看起來像一個競爭條件。底層文件系統中可能的優化可以讓'remove'在真正清除所有內容之前返回,並立即創建具有相同名稱的文件。嘗試在刪除和創建之間添加短暫的睡眠:它應該起作用。 – 2014-10-27 09:21:54
如果您想以「w」模式打開文件,請刪除文件,我認爲您不需要。 – BLUEPIXY 2014-10-27 09:51:12