在阅读了具有该名称的Unix系统调用的mkdir(2)手册页之后,该调用似乎没有在路径中创建中间目录,只在路径中创建了最后一个目录.有没有办法(或其他函数)创建路径中的所有目录,而无需手动解析我的目录字符串并单独创建每个目录?
在阅读了具有该名称的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);
}