我试图获得一个函数,它将创建一个在程序中使用的目录,但是当目录已经存在时会很好地失败。现在我正在做
if (mkdir(path, RW)<0)
{
error out and return
}
我的问题是mkdir返回-1,因为我认为&#34;真正的错误&#34; (没有访问权限,没有空间等...)以及已经存在的目录。我确实希望在目录已存在的每个错误情况下都出错。有什么建议吗?
答案 0 :(得分:1)
您应首先执行mkdir
,因为首先执行stat
将更容易受到竞争条件的影响。在您有
error out and return
如果errno
是EEXIST
(如果已经存在文件或目录,则会发生这种情况),您应首先检查,在这种特殊情况下,请执行stat
以确定是否存在实际上是一个目录(与文件或特殊设备等)。
竞争条件是指多个进程正在创建,删除和使用目录(或文件)的情况。例如:
答案 1 :(得分:1)
基本上这就是我所做的:
errno = 0;
int dir_result = mkdir(dir_path, 0755);
if(dir_result != 0 && errno != EEXIST){
//errors here
}
else{
//your code here
}
问候。