c - Unix 上的递归 mkdir() 系统调用

标签 c posix unix mkdir

阅读具有该名称的 Unix 系统调用的 mkdir(2) 手册页后,该调用似乎并未在路径中创建中间目录,仅在路径中创建最后一个目录。有什么方法(或其他功能)可以在路径中创建所有目录,而无需手动解析我的目录字符串并单独创建每个目录?

最佳答案

不幸的是,没有系统调用可以为您做这件事。我猜那是因为没有一种方法可以为错误情况下应该发生的事情提供真正明确定义的语义。它应该保留已经创建的目录吗?删除它们?如果删除失败怎么办?等等……

然而,推出自己的产品非常容易,并且可以通过快速谷歌搜索“recursive mkdir”。 '出现了一些解决方案。这是靠近顶部的一个:

http://nion.modprobe.de/blog/archives/357-Recursive-directory-creation.html

static void _mkdir(const char *dir) {
    char tmp[256];
    char *p = NULL;
    size_t len;

    snprintf(tmp, sizeof(tmp),"%s",dir);
    len = strlen(tmp);
    if (tmp[len - 1] == '/')
        tmp[len - 1] = 0;
    for (p = tmp + 1; *p; p++)
        if (*p == '/') {
            *p = 0;
            mkdir(tmp, S_IRWXU);
            *p = '/';
        }
    mkdir(tmp, S_IRWXU);
}

关于c - Unix 上的递归 mkdir() 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2336242/

相关文章:

c - 为什么下面的代码不起作用?

c++ - 获取地址信息 : in what way is AI_PASSIVE ignored if the nodename is specified?

linux - 为什么管道输出到 bash 函数不起作用

c - 我该如何改进这段代码?我不喜欢放那么多如果

c - 错误 : add explicit braces to avoid dangling else. C

c - C 运行时的功能和包含的内容

c - "expected ' ) ' before numeric constant"调用 sem_init 时

objective-c - 使用 NSTask 运行 shell 脚本会导致 posix_spawn 错误

unix - 分割unix输出

php - Nginx stat() 失败 (13 : Permission Denied)