有没有比简单地尝试打开文件更好的方法?
int exists(const char *fname)
{
FILE *file;
if ((file = fopen(fname, "r")))
{
fclose(file);
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我基本上是在寻找fdopen()的C++版本.我对此做了一些研究,这似乎应该是容易的事情之一,但事实证明是非常复杂的.我是否遗漏了这种信念(即它真的很容易)?如果没有,是否有一个好的图书馆在那里处理这个?
编辑:将我的示例解决方案移到单独的答案.
我写了一个UNIX守护进程(目标是Debian,但它没关系)我想提供一些创建"pid文件"的方法(一个包含守护进程的进程标识符的文件).
我搜索了一种打开文件的方法,只有它不存在,但找不到.
基本上,我可以这样做:
if (fileexists())
{
//fail...
}
else
{
//create it with fopen() or similar
}
Run Code Online (Sandbox Code Playgroud)
但就目前而言,这段代码不会以原子方式执行任务,这样做会很危险,因为另一个进程可能会在我的测试和文件创建过程中创建文件.
你们对如何做到这一点有什么想法吗?
谢谢.
PS:仅涉及的解决方案的奖励点std::streams.