的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