这是一个创建于 4302 天前的主题,其中的信息可能已经有所发展或是发生改变。
一个简单的C代码,使用mkfifo创建有名管道给其他应用,代码如下:
...
mkfifo("/tmp/myfifo", 0666 );
fd = open("/tmp/myfifo", O_NONBLOCK|O_RDWR);
...
创建成功了,可是权限并不是666,而是仍然只能本用户访问:
prw-r--r--
其他程序如果以其他用户身份写管道,则提示无权限。只有以同一个用户的身份运行的程序能成功写入。
如果改用mknod函数(据说这是老旧的处理方式),则可以成功设置为666(其他用户可读可写)。
系统是Debian7.5.
google了一下mkfifo函数,貌似大家都是这样的写法。是姿势不对么?
谢谢。
2 条回复 2014-07-15 08:15:32 +08:00  | | 1 initialdp 2014 年 7 月 15 日 搞定了,需要用umask先清除掉默认权限: ... umask(0); mkfifo("/tmp/myfifo", 0666 ); ...
不过仍然不明白为什么要这样:不清除原来的,就不能设置新的? 不科学啊。 |
 | | 2 stevenyou 2014 年 7 月 15 日 既然是mask那么所有subprocess生成的文件都要经过parent process 的mask, 你可以用chmod 去改啊 |