目录存在时处理mkdir(C语言)
Handling mkdir when directory exists (C language)
我正在尝试创建一个函数,该函数将创建一个用于程序的目录,但当该目录已经存在时会很好地失败。现在我在做
if (mkdir(path, RW)<0)
{
error out and return
}
我的问题是 mkdir returns -1 对于我认为的 "real errors"(无法访问,没有 space,等等)以及已经存在的目录现存的。除了目录已经存在之外,我确实想在每个错误情况下都出错。有什么建议吗?
你应该先做 mkdir
first, since doing a stat
会更容易受到竞争条件的影响。在你所在的那条线上
error out and return
你应该首先检查 errno
是否是 EEXIST
(如果已经有一个文件或目录就会发生),在这种特殊情况下,做一个 stat
来确定如果确实有目录(相对于文件或特殊设备等)。
竞争条件是指多个进程正在创建、删除和使用目录(或文件)的情况。例如:
- Writing to file and mkdir race conditions C
- race condition between mkdir and stat #92
- Issue 1736: MkdirAll race condition
基本上我就是这样做的:
errno = 0;
int dir_result = mkdir(dir_path, 0755);
if(dir_result != 0 && errno != EEXIST){
//errors here
}
else{
//your code here
}
此致。
我正在尝试创建一个函数,该函数将创建一个用于程序的目录,但当该目录已经存在时会很好地失败。现在我在做
if (mkdir(path, RW)<0)
{
error out and return
}
我的问题是 mkdir returns -1 对于我认为的 "real errors"(无法访问,没有 space,等等)以及已经存在的目录现存的。除了目录已经存在之外,我确实想在每个错误情况下都出错。有什么建议吗?
你应该先做 mkdir
first, since doing a stat
会更容易受到竞争条件的影响。在你所在的那条线上
error out and return
你应该首先检查 errno
是否是 EEXIST
(如果已经有一个文件或目录就会发生),在这种特殊情况下,做一个 stat
来确定如果确实有目录(相对于文件或特殊设备等)。
竞争条件是指多个进程正在创建、删除和使用目录(或文件)的情况。例如:
- Writing to file and mkdir race conditions C
- race condition between mkdir and stat #92
- Issue 1736: MkdirAll race condition
基本上我就是这样做的:
errno = 0;
int dir_result = mkdir(dir_path, 0755);
if(dir_result != 0 && errno != EEXIST){
//errors here
}
else{
//your code here
}
此致。