为什么模式为 1755 的 mkfifo 不向用户授予读取权限和粘滞位?

Joa*_*nte 6 c permissions mkfifo

我正在创建一个服务器和客户端情况,我想在其中创建一个管道,以便他们可以进行通信。

我在服务器代码中创建了管道 mkfifo("fifo",1755);

  • 1 只有创建的用户和 root 才能删除或重命名它,
  • 7 为用户提供读取、写入和执行权限,以及
  • 5 组和其他组只给他们读和执行。

问题是,稍后在服务器代码中,我打开了 fifo 以从中读取,open("fifo",O_RDONLY);但是当我执行它时,它向我显示了一个拒绝我访问 fifo 的错误。

我去看了管道fifo的权限,它是p-wx--s--t这样说的 :

  • p 代表管道,
  • -表示用户没有阅读。我不知道当我用 7 给它的时候,
  • s组执行有用户。我不知道如果我给了 1 那么它应该给用户和其他人只读取和执行的能力,而其他人没有预期的能力。

我对权限有误解吗?

mos*_*svy 14

您不能简单地从管道执行二进制文件:有没有办法从管道执行本机二进制文件?. 此外,我认为可执行文件上的粘性位在现代系统上没有任何价值。

我在服务器代码中创建了管道 mkfifo("fifo",1755);

我去看了管道fifo的权限,它是p-wx--s--t这样说的:

您的错误是在1755没有前导的情况下写入了许可0,这意味着1755已将其视为十进制而不是八进制(1755 & ~022 = 03311 = p-wx--s--t022您的 umask在哪里)

  • 粘滞位对文件和目录有不同的语义:对于目录,它阻止用户删除或重命名不属于他们的文件;对于常规文件,现在没有太大意义。有关所有详细信息,请阅读 chmod(2) 联机帮助页。此外,`mkfifo("fifo", 0755)` 前导`0` ;-)。 (4认同)