在使用FIFO在不同进程之间传输信息时,我发现mkfifo创建的文件不能被进程访问。我不知道如何更改我的程序。请帮助我:(
if (mkfifo("signal", O_CREAT) < 0)
{
cerr << "Errors occur :(" << endl;
cerr << errno << endl;
exit(1);
}
名为signal的文件的权限如下:
p---rwx---
发布于 2015-06-08 21:35:32
如果您阅读了手册页,就会知道O_CREAT
是mkfifo()
的无效参数
FIFO ()生成一个名为
的特殊文件。mode指定FIFO的权限。它由进程的umask以通常的方式修改:创建的文件的权限是(mode & ~umask)。
权限位标志是在<sys/stat.h>
中定义的,可以通过阅读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-rw
,那么你会这样做:
mkfifo("signal", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
https://stackoverflow.com/questions/30708692
复制相似问题