Linux下的mkdir函数

本文详细介绍了 Linux 下 mkdir 函数的用法及参数含义,包括如何设置新建目录的权限等关键信息。

Linux下的mkdir函数

原型: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.
//这下面就不说明了,因为这又涉及set uid ,set gid,sticky bit这三个权限,后面有一篇转贴再说明,不过这也只有我这样的菜鸟不知道的啦.

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.

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/huangzhtao/archive/2008/05/21/2467683.aspx

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、付费专栏及课程。

余额充值