首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

打开命名管道权限的疑问,该如何处理

2012-03-08 
打开命名管道权限的疑问C/C++ code#includesys/types.h#includesys/stat.h#includeunistd.h#include

打开命名管道权限的疑问

C/C++ code
#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>#include<stdio.h>#include<fcntl.h>#include<string.h>int main(){    if(mkfifo("testfifo",O_CREAT|O_RDWR) == -1)    {            perror("mkfifo");        return 0;    }    int fd;     if((fd=open("testfifo",O_WRONLY,0100)) == -1){        perror("open");        return 0;    }    char buf[]="test data.........";    int len=strlen(buf);    if(write(fd,buf,len) == -1){        perror("write");        return 0;    }        return 0;}

如上一个程序:当用普通身份执行时,表示无法打开,用root可以打开pipe,提示如下:
china@china-MS-7302:~/code$ ./a.out 
open: Permission denied
查看权限为:
p--x------ 1 china china 0 2011-12-09 14:31 testfifo|

不知道应当如何正确打开,当程序是以普通用户身份运行时?

[解决办法]
mkfifo默认就是creat|excl,第二个参数是Mode而不是打开方式。

mkfifo是make a fifo,不是open a fifo。
[解决办法]
if(mkfifo("testfifo",O_CREAT|O_RDWR) == -1)
-----------------------------------------------
qq120848369说的对,改为if(mkfifo("testfifo", 0600) == -1)试一下吧

热点排行