打开命名管道权限的疑问

hongbin7698 2011-12-09 02:45:11

#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|

不知道应当如何正确打开,当程序是以普通用户身份运行时?
...全文
189 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongbin7698 2011-12-09
  • 打赏
  • 举报
回复
nice.!解决了。。if(mkfifo("testfifo", 0600) == -1)。。感谢qq120848369
reactiveF 2011-12-09
  • 打赏
  • 举报
回复
if(mkfifo("testfifo",O_CREAT|O_RDWR) == -1)
-----------------------------------------------
qq120848369说的对,改为if(mkfifo("testfifo", 0600) == -1)试一下吧
hongbin7698 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 reactivef 的回复:]

请在linux终端下键入命令:
man 3 mkfifo
详细阅读手册,呵呵
[/Quote]

SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>

int mkfifo(const char *pathname, mode_t mode);
只能查到这个。用三个参数反正编译不了,麻烦你具体讲解下。
qq120848369 2011-12-09
  • 打赏
  • 举报
回复
mkfifo默认就是creat|excl,第二个参数是Mode而不是打开方式。

mkfifo是make a fifo,不是open a fifo。
reactiveF 2011-12-09
  • 打赏
  • 举报
回复
请在linux终端下键入命令:
man 3 mkfifo
详细阅读手册,呵呵
hongbin7698 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 reactivef 的回复:]

if(mkfifo("testfifo",O_CREAT|O_RDWR) == -1)
-----------------------------------------------
改为if(mkfifo("testfifo",O_CREAT|O_RDWR,0600) == -1)试一下
[/Quote]

mkfifo只有两个参数的。。。木有第三个参数
reactiveF 2011-12-09
  • 打赏
  • 举报
回复
if(mkfifo("testfifo",O_CREAT|O_RDWR) == -1)
-----------------------------------------------
改为if(mkfifo("testfifo",O_CREAT|O_RDWR,0600) == -1)试一下

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧