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



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

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
}

谨致问候。

最新更新