我需要在linux上编写c代码来检查是否
1)文件存在且
2)如果它不存在,那么我需要打开文件并写入文件。
作为一个多线程/多进程环境,我想确保在一个原子操作中发生1和2以上
我看了What's the best way to check if a file exists in C? (cross platform)并考虑了@Dan Lenski建议的解决方案。所以请不要在没有完全阅读的情况下将其标记为重复。问题在于O_CREAT |的组合O_WRONLY | open man page 中提到的开放系统调用中的O_EXCL标志不允许符号链接。听起来它也有NFS分区问题
我们在路径中使用符号链接(Debatable - 为什么我们最终会使用) 所以我想做一些类似于Dan的建议,并在下面转载的代码片段中引用,但是什么可以容忍一条指向符号链接的路径
#include <fcntl.h>
#include <errno.h>
fd = open(pathname, O_CREAT | O_WRONLY | O_EXCL, S_IRUSR | S_IWUSR);
if (fd < 0) {
/* failure */
if (errno == EEXIST) {
/* the file already existed */
...
}
} else {
/* now you can use the file */
}