mode_t 0644 是啥意思?
Posted
技术标签:
【中文标题】mode_t 0644 是啥意思?【英文标题】:What does mode_t 0644 mean?mode_t 0644 是什么意思? 【发布时间】:2013-08-27 06:38:38 【问题描述】:#define COPYMODE 0644
creat(argV[2],COPYMODE);
我在 copy.c 文件中有这两行代码。 我不知道这意味着什么。 请举个例子
【问题讨论】:
以及如何使用 c 程序复制文件并维护复制文件的可执行文件 去掉#define
末尾的分号
【参考方案1】:
一个模式有 3x3 位标志:
(拥有)用户 阅读 写 执行 组 阅读 写 执行 其他 阅读 写 执行所以每个三元组都可以很好地编码为八进制数字。
rwx oct meaning
--- --- -------
001 01 = execute
010 02 = write
011 03 = write & execute
100 04 = read
101 05 = read & execute
110 06 = read & write
111 07 = read & write & execute
所以 0644 是:
* (owning) User: read & write
* Group: read
* Other: read
请注意,在 C 中,首字母 0
表示八进制表示法,就像 0x
表示十六进制表示法一样。因此,每次您在 C 中编写纯零时,它实际上是一个 八进制 零(有趣的事实)。
也可以这样写:
-rw-r--r--
而完全权限,0777 也可以写:
-rwxrwxrwx
因此传递给creat
的八进制数直接(通过位模式的八进制编码)对应于ls -l
显示的文件权限。
【讨论】:
我认为最好将它们解释为位标志 在这种情况下Owner
并不常见。 User
很常见。另请参阅man chmod
。
为了不失去我建议使用措辞(owning) User
而不是Owner
..
对了,为什么只能说-644,为什么需要0644?
@SHREYASJOSHI 在 C 源代码中,您必须使用初始零来指定八进制常量,否则将被视为十进制常量。使用像chmod
这样的命令行工具,您可以省略0
和chmod
无论如何都会将该数字解释为八进制常量。【参考方案2】:
意思是:
文件的所有者可以读写 (6) 与文件所有者同组的用户可以读取(前 4 个) 所有用户都可以阅读(第二个 4)见http://www.ss64.com/bash/chmod.html。
【讨论】:
非常有用的链接@Rafe以上是关于mode_t 0644 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章