由于linux只有创建单级路径的库函数(如果有创建多级路径的库函数,麻烦通知在下),参考了网上的一些代码,觉得它们都有不足之处,遂整合完善之,以示下文,如有还有不足之处,还请指正,多谢合作!
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
int mk_multy_dir(const char *muldir);
int main()
{
char *dir = "./hello/log/"; //在当前目录下再建一个两级目录.
mk_multy_dir(dir);
return 0;
}
/*
* 功能:创建多级路径,只创建文件的路径,并不包含创建文件.
* 若路径已存在则直接返回,否则一级一级地创建出多级路径。
* 参数:muldir,要创建的多级目录字符串,可以是相对路径或绝对路径。
* 返回值:成功返回0,失败为-1.
*/
int mk_multy_dir(const char *muldir)
{
int i=0,len=0;
char dirstr[1024]={0};
if( NULL == muldir ){
return -1;
}
if (access(muldir, F_OK)==0) {
return 0;
}
memset(dirstr, 0, sizeof(dirstr));
strcpy(dirstr, muldir);
len = strlen(dirstr);
if (dirstr[len-1] != '/') {
strcat(dirstr, "/");
len++;
}
if (dirstr[0] == '/') {
i++;
}
while (i<len)
{
if (dirstr[i] == '/')
{
dirstr[i] = '\0';
//判断此目录是否存在,不存在则创建
if (access(dirstr, F_OK) != 0) {
if (mkdir(dirstr, 0775)!=0) {
return -1;
}
}
dirstr[i]='/';
}
i++;
}
return 0;
}
结果:
在当前目录下再建一个两级目录:./hello/log/