我正在尝试创建一个函数,该函数将创建一个用于程序的目录,但当目录已经存在时,会很好地失败。现在我在做
if (mkdir(path, RW)<0)
{
error out and return
}
我的问题是,对于我认为是"真正的错误"(没有访问权限、没有空间等)以及已经存在的目录,mkdir返回-1。除了目录已经存在之外,我确实想在每个错误情况下出错。有什么建议吗?
参考:http://linux.die.net/man/3/mkdir
您应该先执行mkdir
,因为先执行stat
更容易受到比赛条件的影响。在你有的线路上
error out and return
您应该首先检查errno
是否为EEXIST
(如果已经有文件或目录,就会发生这种情况),在这种特殊情况下,执行stat
以确定是否确实有目录(与文件或特殊设备等相比)。
竞争条件是指多个进程正在创建、删除和使用目录(或文件)的情况。例如:
- 写入文件和mkdir竞争条件C
- mkdir和stat#92之间的竞争条件
- 第1736期:Mkdir所有竞赛条件
基本上这就是我所做的:
errno = 0;
int dir_result = mkdir(dir_path, 0755);
if(dir_result != 0 && errno != EEXIST){
//errors here
}
else{
//your code here
}
谨致问候。