这是一个创建于 3878 天前的主题,其中的信息可能已经有所发展或是发生改变。
一个简单的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-07-15 07:59:18 +08:00
搞定了,需要用umask先清除掉默认权限: ... umask(0); mkfifo("/tmp/myfifo", 0666 ); ...
不过仍然不明白为什么要这样:不清除原来的,就不能设置新的? 不科学啊。
|
 |
|
2
stevenyou 2014-07-15 08:15:32 +08:00
既然是mask那么所有subprocess生成的文件都要经过parent process 的mask, 你可以用chmod 去改啊
|