在读取带有该名称的Unix系统调用的mkdir(2)手册页后,看起来该调用不会在路径中创建中间目录,而只创建路径中的最后一个目录。有没有任何方式(或其他功能)创建路径中的所有目录,而不诉诸手动解析我的目录字符串和单独创建每个目录?
没有系统调用来为你做,不幸的是。我猜这是因为没有一个方法有真正明确定义的语义在错误情况下应该发生。是否应该离开已经创建的目录?删除它们?如果删除失败怎么办?等等…
这是很容易滚动自己的,然而,一个快速google为’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); }