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
)来屏蔽差异。