Process 无权访问由mkfifo创建的文件

Process 无权访问由mkfifo创建的文件,process,pipe,file-permissions,fifo,mkfifo,Process,Pipe,File Permissions,Fifo,Mkfifo,当使用FIFO在不同进程之间传输信息时,我发现mkfifo创建的文件不能被进程访问。我不知道如何更改我的程序。请帮助:( 如果阅读手册页,您会知道O_create是mkfifo()的无效参数。: mkfifo()生成一个名为pathname的FIFO特殊文件。mode指定FIFO的权限。它由进程的umask以通常的方式修改:所创建文件的权限为(mode&~umask) 权限位标志在中定义,可以通过阅读stat(2)的手册页在系统中查阅。以下是相关列表: S_IRUSR 00400

当使用FIFO在不同进程之间传输信息时,我发现mkfifo创建的文件不能被进程访问。我不知道如何更改我的程序。请帮助:(


如果阅读手册页,您会知道
O_create
mkfifo()的无效参数。

mkfifo()生成一个名为pathname的FIFO特殊文件。mode指定FIFO的权限。它由进程的umask以通常的方式修改:所创建文件的权限为(mode&~umask)

权限位标志在
中定义,可以通过阅读
stat(2)
的手册页在系统中查阅。以下是相关列表:

S_IRUSR    00400     owner has read permission
S_IWUSR    00200     owner has write permission
S_IXUSR    00100     owner has execute permission

S_IRGRP    00040     group has read permission
S_IWGRP    00020     group has write permission
S_IXGRP    00010     group has execute permission

S_IROTH    00004     others have read permission
S_IWOTH    00002     others have write permission
S_IXOTH    00001     others have execute permission
因此,通过将正确的权限标志传递给
mkfifo()
,可以解决您的问题。如果您想要
rw rw
,则可以执行以下操作:

mkfifo("signal", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
S_IRUSR    00400     owner has read permission
S_IWUSR    00200     owner has write permission
S_IXUSR    00100     owner has execute permission

S_IRGRP    00040     group has read permission
S_IWGRP    00020     group has write permission
S_IXGRP    00010     group has execute permission

S_IROTH    00004     others have read permission
S_IWOTH    00002     others have write permission
S_IXOTH    00001     others have execute permission
mkfifo("signal", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);