mode_t 0644是什么意思?

Syc*_*ycx 9 c file-permissions

#define COPYMODE 0644
creat(argV[2],COPYMODE);
Run Code Online (Sandbox Code Playgroud)

我在copy.c文件中有这两行代码.我不知道这意味着什么.请举一些例子

lus*_*oog 42

模式有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
Run Code Online (Sandbox Code Playgroud)

所以0644是:

* (owning) User: read & write
* Group: read
* Other: read
Run Code Online (Sandbox Code Playgroud)

请注意,在C中,初始0值表示八进制表示法,就像0x表示十六进制表示法一样.因此,每次在C中写入纯零时,它实际上是八进制零(有趣的事实).

这也可以写成:

-rw-r--r--
Run Code Online (Sandbox Code Playgroud)

完全权限,也可以写入0777:

-rwxrwxrwx
Run Code Online (Sandbox Code Playgroud)

因此,传递给的八进制数creat直接对应(通过位模式的八进制编码)对应的文件权限ls -l.

  • 为了不失去意义,我建议使用“(拥有)用户”一词而不是“所有者”。 (2认同)

Raf*_*ler 11

这意味着:

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

请参阅http://www.ss64.com/bash/chmod.html.