【发布时间】:2012-06-26 15:38:09
【问题描述】:
我正在编写一个简单的 C 程序来交换消息 通过linux上的命名管道。问题是我有 以超级用户身份运行它以使其工作,否则我得到: “权限被拒绝”错误。 授予目录的写权限:
drwxr-xr-x 2 alpa alpa 4096 26 giu 17.24 .
Umask应该没问题:
$ umask
0022
实际上创建了管道文件,但具有错误权限位:
$ ls -l | grep fifo.fifo
pr----x--t 1 alpa alpa 0 26 giu 17.29 fifo.fifo
所以当我尝试打开它以读取或写入 open() 系统调用失败。
代码如下:
...
if(mkfifo(pathname, perms) == -1 && errno != EEXIST)
return NULL;
if(chmod(pathname, perms) == -1)
return NULL;
...
fifo->fd[0]= open(fifo->pathname, O_RDONLY);
if(fifo->fd[0] == -1){
fifo_delete(&fifo);
return NULL;
...
提前感谢您的帮助。
【问题讨论】:
-
您传递的
perms的值是多少? -
fifo=fifo_make("./fifo.fifo", 2, 666, 'r') 值为666
-
666 是十进制的。你想要 0666。
-
粘性位 (
t) 表示数字不是八进制是问题的最可能原因。 -
这解决了我的问题。非常感谢
标签: c unix named-pipes