当前位置: 技术问答>linux和unix
打开命名管道权限的疑问
来源: 互联网 发布时间:2017-01-23
本文导语: 本帖最后由 hongbin7698 于 2011-12-09 14:45:42 编辑 #include #include #include #include #include #include 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"); re...
#include
#include
#include
#include
#include
#include
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。
mkfifo是make a fifo,不是open a fifo。
|
if(mkfifo("testfifo",O_CREAT|O_RDWR) == -1)
-----------------------------------------------
qq120848369说的对,改为if(mkfifo("testfifo", 0600) == -1)试一下吧
-----------------------------------------------
qq120848369说的对,改为if(mkfifo("testfifo", 0600) == -1)试一下吧