【问题标题】:Handling mkdir when directory exists (C language)目录存在时处理 mkdir(C 语言)
【发布时间】:2016-02-23 14:43:36
【问题描述】:

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

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

我的问题是 mkdir 对于我认为的“真正的错误”(没有访问权限、没有空间等)以及已经存在的目录返回 -1。除了目录已经存在之外,我确实想在每个错误情况下都出错。有什么建议吗?

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

【问题讨论】:

标签: c error-handling mkdir


【解决方案1】:

您应该先执行mkdir,因为先执行stat 会更容易受到竞争条件的影响。在你有的线上

error out and return

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

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

【讨论】:

    【解决方案2】:

    基本上我就是这样做的:

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

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多