我正在创建一个服务器和客户端的情况,我想创建一个管道以便它们可以进行通信。
我使用以下命令在服务器代码中创建了管道
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--t
;022
您的umask在哪里)