1

从我的家庭作业:

备份文件存储在名为 .mybackup 的隐藏目录中,如有必要,您的程序会创建该目录。要创建目录,请使用 mkdir() 函数(单击此处了解详细信息),但请务必检查目录是否已存在(使用 stat() 或检查 EEXIST)。如果该目录已经存在,请不要覆盖它。

如果目录已经存在,我认为 mkdir 固有地返回 -1。我肯定在某个地方读到过。我在这里弄错了吗?

4

2 回答 2

4

mkdir任何错误都返回 -1。所以为了区分错误,即发现目录是否已经存在,你应该使用该stat函数或者在返回-1之后检查errnoEEXISTmkdir

if(mkdir(".mybackup", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) == -1)
{
    if(errno == EEXIST)
    {
        // Directory already exists, do something
    }
}
于 2012-11-17T23:24:37.353 回答
2

mkdir功能可能因多种原因而失败:

[EACCES] 拒绝路径前缀的组件的搜索权限,或拒绝要创建的目录的父目录的写入权限。

[EEXIST] 命名文件存在。

[ELOOP] 在解析路径参数期间遇到的符号链接中存在循环。

[EMLINK] 父目录的链接数将超过 {LINK_MAX}。

[ENAMETOOLONG] 路径参数的长度超过 {PATH_MAX} 或路径名组件长于 {NAME_MAX}。

[ENOENT] path 指定的路径前缀的组件未命名现有目录或路径为空字符串。

[ENOSPC] 文件系统没有足够的空间来保存新目录的内容或扩展新目录的父目录。

[ENOTDIR] 路径前缀的组件不是目录。

[EROFS] 父目录驻留在只读文件系统上。如果出现以下情况,mkdir() 函数可能会失败:

[ELOOP] 在解析路径参数期间遇到了超过 {SYMLOOP_MAX} 个符号链接。

[ENAMETOOLONG] 由于在解析路径参数时遇到符号链接,替换的路径名字符串的长度超过了 {PATH_MAX}。

如果函数返回,如果-1不检查就无法确定是哪个特定错误errno,这就是建议的原因。

于 2012-11-17T23:26:30.817 回答