C on linux如何检查文件是否存在,如果不存在则创建新文件 - 以符号链接容错的方式

时间:2017-06-09 07:11:00

标签: c linux file atomic symlink

我需要在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 */
}

0 个答案:

没有答案