我正在编写一个简单的 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;
...
预先感谢您的帮助。