unix 下的 mkdir 函数只能在一个已经存在的目录下创建一个子目录,而常见的情况是创建一个多级目录,就像 shell 中的 mkdir -p
一样。看过工作中的不少实现,感觉不够简洁和清晰,于是找到了这个实现(链接:sharp2wing),应该可以了。
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#define RWXRR (S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTH)
int make_path(const char *path, mode_t mode)
{
char dir_name[256];
int i = 0, len = 0;
strcpy(dir_name, path);
len = strlen(dir_name);
if(dir_name[len-1] != '/') {
strcat(dir_name, "/");
len = strlen(dir_name);
}
for (i = 1; i < len; i++) {
if(dir_name[i] == '/') {
dir_name[i] = 0;
if (access(dir_name, F_OK) != 0) {
if(mkdir(dir_name, mode) != 0) {
perror("mkdir error");
return -1;
}
}
dir_name[i] = '/';
}
}
return 0;
}
int main()
{
mode_t set_mode = RWXRR;
char path[] = "/path/for/test";
int ret = make_path(path, set_mode);
if (ret) {
printf("mkdir %s failed\n", path);
return -1;
}
printf("mkdir %s success\n", path);
return 0;
}