【问题标题】: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末尾的分号

标签: c file-permissions


【解决方案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 这样的命令行工具,您可以省略0chmod 无论如何都会将该数字解释为八进制常量。
【解决方案2】:

意思是:

  • 文件的所有者可以读写 (6)
  • 与文件所有者同组的用户可以读取(前 4 个)
  • 所有用户都可以阅读(第二个 4)

http://www.ss64.com/bash/chmod.html

【讨论】:

  • 非常有用的链接@Rafe
猜你喜欢
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2017-06-11
  • 2018-03-05
  • 2023-03-27
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多