#include <sys/types.h>
#include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode);
pathname:要創建的目錄路徑(絕對或相對)。mode:權限掩碼(八進制),如 0755,實際權限受 umask 影響。errno。EEXIST:目錄已存在。ENOENT:父目錄不存在(需遞歸創建,參考 mkdir -p 邏輯)。EACCES:無寫權限。ENOSPC:磁盤空間不足。#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
int main(void) {
const char *path = "/root/mkdir1";
if (mkdir(path, 0766) == 0) {
printf("created the directory %s.\n", path);
} else {
printf("can't create the directory %s.\n", path);
printf("errno: %d\n", errno);
printf("ERR : %s\n", strerror(errno));
}
return 0;
}
created the directory /root/mkdir1.
標準 mkdir 不支持遞歸,需自行拆分路徑逐級創建:
int mkdir_p(const char *path, mode_t mode) {
char *buf = strdup(path);
char *p = buf + 1; // 跳過開頭 '/'
while ((p = strchr(p, '/'))) {
*p = '\0';
if (mkdir(buf, mode) && errno != EEXIST) {
free(buf); return -1;
}
*p = '/';
p++;
}
int ret = mkdir(buf, mode);
free(buf);
return (ret == 0 || errno == EEXIST) ? 0 : -1;
}
sys/stat.h 並正確設置 mode。strerror(errno) 打印可讀錯誤信息。