阅读具有该名称的 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/