嘿,对于这段代码,编写系统的人使用文本文件在进程之间传递数据.我有一个看起来像所有意图和目的的循环:
while (true)
{
//get the most up-to-date info from the other processes
pFile = fopen(paramsFileName, "r");
// Do a bunch of stuff with pFile
Sleep(100);
}
Run Code Online (Sandbox Code Playgroud)
这将工作几百次,但无论出于何种原因,它会在一段时间后返回NULL,即使它已经打开了相同的文件路径数百次!我已经仔细检查过该文件是否存在并且当fopen返回NULL时其中包含数据,并且试图在其中放置延迟/重试无效.
您能想到什么会导致这种情况?
NG.*_*NG. 14
您正在达到操作系统的打开文件/文件描述符限制.如果您在循环做FCLOSE(PFILE)应该永远运行.
你真的想检查你的退货代码.我怀疑使用正确的errno的perror/strerror会报告你已经过了文件描述符限制.
尝试这样的事情,看看你是否得到了一个很好的错误信息.
FILE* f = fopen(filename);
if (NULL == f) {
fprintf(stderr,
"Could not open: %s. %s\n",
filename,
strerror(errno);
}
Run Code Online (Sandbox Code Playgroud)