在C语言中与mkdir -p相对应的命令,可以递归地创建嵌套目录。

4
我想在一个新的目录内创建一个新目录。就像这样:
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>

int main() {

    const char * path = "/home/abc/testabc1/testabc2" ;
    mode_t mode = 0777;

    if (mkdir(path, mode) == -1) {

//        printf("Error occurred : %s ", strerror(errno));
        perror("abc");

    }

    else {

        printf("Directory created\n");
    }


}

当我执行此操作时,出现以下错误:

abc: No such file or directory

如果我删除testabc2,那么我就能够成功创建目录。为什么会这样呢?

1
创建 testabc2 的权限和所有权是什么?你是用哪个用户运行程序的? - Raptor
以非 root 用户身份运行。我将模式指定为 0777。这在代码中已经设置好了。 - Ankur Agarwal
目录 testabc1 是否存在? - Jabberwocky
@MichaelWalz 不,它不会。 - Ankur Agarwal
1个回答

6

只能在已经存在的目录中创建目录。如果您想要执行类似于 mkdir -p 的操作,则必须执行与其相同的操作,即从路径顶部依次创建一个目录。

在您的情况下,这意味着先创建 /home/abc/testabc1 目录,然后再创建 /home/abc/testabc1/testabc2 目录。

您的错误消息也是误导性的,因为perror("abc"); 将在“任何”错误前加上"abc:"。它与目录 "abc" 没有任何关系。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接