目录存在时处理mkdir(C语言)

Handling mkdir when directory exists (C language)

我正在尝试创建一个函数,该函数将创建一个用于程序的目录,但当该目录已经存在时会很好地失败。现在我在做

if (mkdir(path, RW)<0)
{
error out and return
}

我的问题是 mkdir returns -1 对于我认为的 "real errors"(无法访问,没有 space,等等)以及已经存在的目录现存的。除了目录已经存在之外,我确实想在每个错误情况下都出错。有什么建议吗?

参考: http://linux.die.net/man/3/mkdir

你应该先做 mkdir first, since doing a stat 会更容易受到竞争条件的影响。在你所在的那条线上

error out and return

你应该首先检查 errno 是否是 EEXIST(如果已经有一个文件或目录就会发生),在这种特殊情况下,做一个 stat 来确定如果确实有目录(相对于文件或特殊设备等)。

竞争条件是指多个进程正在创建、删除和使用目录(或文件)的情况。例如:

基本上我就是这样做的:

errno = 0;
int dir_result = mkdir(dir_path, 0755);
if(dir_result != 0 && errno != EEXIST){
    //errors here   
}
else{
    //your code here
}

此致。