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

时间:2015-11-21 00:05:37

标签: c error-handling mkdir

我试图获得一个函数,它将创建一个在程序中使用的目录,但是当目录已经存在时会很好地失败。现在我正在做

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

我的问题是mkdir返回-1,因为我认为&#34;真正的错误&#34; (没有访问权限,没有空间等...)以及已经存在的目录。我确实希望在目录已存在的每个错误情况下都出错。有什么建议吗?

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

2 个答案:

答案 0 :(得分:1)

您应首先执行mkdir,因为首先执行stat将更容易受到竞争条件的影响。在您有

的行
error out and return

如果errnoEEXIST(如果已经存在文件或目录,则会发生这种情况),您应首先检查,在这种特殊情况下,请执行stat以确定是否存在实际上是一个目录(与文件或特殊设备等)。

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

答案 1 :(得分:1)

基本上这就是我所做的:

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

问候。