关于linux下的mkdir函数

本文详细介绍了mkdir函数的使用方法及参数含义。此函数用于创建指定名称的目录,并设置相应的权限。文章解释了如何通过mode参数来定义新目录的不同访问权限。
原型:int mkdir (const char *filename, mode_t mode)

返回0表示成功,返回-1表述出错。使用该函数需要包含头文件sys/stat.h
mode 表示新目录的权限,可以取以下值:
S_IRUSR
S_IREAD
Read permission bit for the owner of the file. On many systems this bit is 0400. S_IREAD is an obsolete synonym provided for BSD compatibility.
S_IWUSR
S_IWRITE
Write permission bit for the owner of the file. Usually 0200. S_IWRITE is an obsolete synonym provided for BSD compatibility.
S_IXUSR
S_IEXEC
Execute (for ordinary files) or search (for directories) permission bit for the owner of the file. Usually 0100. S_IEXEC is an obsolete synonym provided for BSD compatibility.
S_IRWXU
This is equivalent to (S_IRUSR | S_IWUSR | S_IXUSR).
S_IRGRP
Read permission bit for the group owner of the file. Usually 040.
S_IWGRP
Write permission bit for the group owner of the file. Usually 020.
S_IXGRP
Execute or search permission bit for the group owner of the file. Usually 010.
S_IRWXG
This is equivalent to (S_IRGRP | S_IWGRP | S_IXGRP).
S_IROTH
Read permission bit for other users. Usually 04.
S_IWOTH
Write permission bit for other users. Usually 02.
S_IXOTH
Execute or search permission bit for other users. Usually 01.
S_IRWXO
This is equivalent to (S_IROTH | S_IWOTH | S_IXOTH).
S_ISUID
This is the set-user-ID on execute bit, usually 04000. See How Change Persona.
S_ISGID
This is the set-group-ID on execute bit, usually 02000. See How Change Persona.
S_ISVTX
This is the sticky bit, usually 01000.
 
Linux系统中,`mkdir`函数是用于创建目录的C库函数,它通常通过调用`syscall()`或直接操作文件系统的API来实现。如果`mkdir`函数运行失败,可能是由于以下几个原因: 1. 权限不足:当前用户可能没有在指定路径下创建目录所需的权限。需要检查是否有足够的`chmod 0755`等类似命令所需的权限。 2. 目录已存在:尝试创建的目录路径已经存在,`mkdir`不会覆盖已存在的目录。可以先使用`test -d`或`ls -l`确认目标路径是否已存在。 3. 路径错误:路径可能是不存在的、太长,或者包含非法字符,如..(上一级目录)。 4. 文件系统空间不足:如果磁盘空间已满,也会导致`mkdir`失败。 5. 错误处理:在实际编程中,如果没有正确捕获和处理`errno`全局变量(如`errno == EEXIST`),当错误发生时可能会返回错误状态。 要解决这个问题,你可以按照以下步骤排查: 1. 检查权限:使用`sudo`切换到管理员权限,或者修改当前用户的权限设置。 2. 判断路径:确保提供的路径正确无误,并非循环引用或其他无效路径。 3. 检查空间:查看目标目录所在的卷是否有剩余空间。 4. 添加错误处理:在调用`mkdir`前,先检查`errno`并处理可能出现的错误情况。 如果你是在编写C程序,记得检查上述点并添加适当的错误处理代码,例如: ```c #include <sys/stat.h> #include <err.h> int mkdir_errno(const char *path) { if (mkdir(path, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) != 0) { if (errno == EEXIST) return 0; // 知道目录已经存在 else perror("mkdir failed"); return -1; } return 0; } // 使用示例 if (mkdir_errno("/path/to/directory") < 0) { // 处理错误... } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值