mkdir 函数在 Linux 和 Windows 系统中的区别主要体现在 路径格式、权限控制、系统调用行为 以及 错误处理 等方面。以下是详细对比:
/ 作为路径分隔符(例如 /home/user/dir)。Dir 和 dir 是不同的目录)。\ 作为默认分隔符(例如 C:\Users\user\dir),但正斜杠 / 通常也能被兼容。Dir 和 dir 可能被视为相同)。mode_t mode 参数(如 0777)显式设置目录权限(受 umask 影响)。c
mkdir("/path/to/dir", 0755); // 所有者可读写执行,其他用户只读执行c
CreateDirectory("C:\\path\\to\\dir", NULL); // 无权限参数mkdir(const char *pathname, mode_t mode);<sys/stat.h> 和 <sys/types.h>。CreateDirectory 或 CreateDirectoryEx:
c
BOOL CreateDirectory(LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes);<windows.h>。_mkdir(来自 <direct.h>)是兼容 POSIX 的简化版本,但不支持权限设置。-1 并设置 errno(如 EEXIST 目录已存在、EACCES 无权限)。c
if (mkdir("/path/to/dir", 0755) == -1) {
perror("mkdir failed");
}CreateDirectory 返回 0 表示失败,需调用 GetLastError() 获取错误码(如 ERROR_ALREADY_EXISTS)。c
if (!CreateDirectory("C:\\path\\to\\dir", NULL)) {
DWORD err = GetLastError();
fprintf(stderr, "Error: %d\n", err);
}c
#ifdef _WIN32
#include <windows.h>
#define mkdir(path, mode) CreateDirectory(path, NULL)
#else
#include <sys/stat.h>
#include <sys/types.h>
#endif<filesystem>)。| 特性 | Linux/Unix | Windows |
|---|---|---|
| 路径分隔符 | / |
\(兼容 /) |
| 权限控制 | mode_t 参数 |
依赖父目录/安全描述符 |
| 函数原型 | mkdir(path, mode) |
CreateDirectory(path, attr) |
| 错误码 | errno |
GetLastError() |
| 符号链接处理 | 默认解析 | 依赖 API 行为 |
如果需要编写跨平台代码,建议封装底层系统调用或使用高级库(如 Qt、Python 的 os.mkdir)来屏蔽差异。