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

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

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

我使用以下命令在服务器代码中创建了管道 mkfifo("fifo",1755);

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

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

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

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

我对权限有误解吗?

答案1

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

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

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

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

相关内容