【问题标题】:I want to use the mkdir Posix function to create a directory, but the parent directory does not exist, what should i d0? [duplicate]我想用mkdir Posix函数创建一个目录,但是父目录不存在,我应该d0怎么办? [复制]
【发布时间】:2023-11-23 09:07:01
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>


int main(int argc, const char *argv[])
{
    char* original_path = "/home/userxxx/somedir/newdir";



    if (mkdir(original_path,0777) == -1) {
        perror(argv[0]);
        exit(EXIT_FAILURE);
    }



    return 0;
}

请记住,这不是系统调用,所以我不能使用-p来创建父目录,我必须使用posix函数,如果它们不存在,它也应该创建父目录和中间目录。

【问题讨论】:

  • 一个直接的答案是通过遍历路径来创建所有不存在的目录。
  • 也许先创建父目录?
  • 请注意,代码中实际使用的mkdir(2)“系统调用”和接受-p但不是系统调用的mkdir(1)工具的“system()调用”之间有很好的区别.

标签: c linux posix mkdir


【解决方案1】:

您可以使用递归技术解决这个问题:在伪代码中

createFolder(folder)
{
    if folder.exists return // blocks the recursion
    createFolder(folder.parent)
    folder.makefolder // this will make a folder one level at a time
}

它有一个吸引人的特性,即对存在的文件夹上的函数的调用是无操作的。

【讨论】: