mkdir -p 在 C 中等效,递归地创建嵌套目录

Posted

技术标签:

【中文标题】mkdir -p 在 C 中等效,递归地创建嵌套目录【英文标题】:mkdir -p equivalent in C that creates nested directories recursively 【发布时间】:2014-12-27 07:14:36 【问题描述】:

我想在新目录中创建一个新目录。像这样的:

#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,那么我可以成功创建目录。为什么会这样?

【问题讨论】:

创建的testabc2的权限和所有权是什么?你是哪个用户运行程序的? 以非 root 用户身份运行。我将模式指定为 0777。它在代码中。 Recursive mkdir() system call on Unix 的可能重复项 目录testabc1是否存在? @MichaelWalz 不,它没有。 【参考方案1】:

您只能在现有目录中创建目录。如果你想做mkdir -p 的等效操作,你必须做同样的事情,即从路径顶部开始一个接一个地创建目录。

在您的情况下,这意味着mkdir/home/abc/testabc1mkdir/home/abc/testabc1/testabc2 之前。

您的错误消息也具有误导性,因为perror("abc"); 会在 any 错误前加上“abc:”。它与目录“abc”无关。

【讨论】:

以上是关于mkdir -p 在 C 中等效,递归地创建嵌套目录的主要内容,如果未能解决你的问题,请参考以下文章

LINUX基本命令

如何使用 Bash 递归地创建不存在的子目录?

python递归排序所有嵌套的iterable

centos下可以嵌套创建多少文件夹

您如何在方案中运行等效的嵌套 for 循环

不递归地访问嵌套列表和字典中的所有元素