首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux C 編程:使用 mkdir 創建目錄完整指南

     編輯:關於C語言

函數原型

#include <sys/types.h>
#include <sys/stat.h>

int mkdir(const char *pathname, mode_t mode);
  • pathname:要創建的目錄路徑(絕對或相對)。
  • mode:權限掩碼(八進制),如 0755,實際權限受 umask 影響。
  • 返回值:成功返回 0,失敗返回 -1 並設置 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 -p 效果)

標準 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) 打印可讀錯誤信息。
  • 多級目錄需自行實現遞歸創建邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved