无法打开FIFO [英] can not open FIFO
本文介绍了无法打开FIFO的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我编写此程序来测试Ubuntu中的FIFO.主程序创建一个子进程来写入内容,然后父进程读取并打印它
I write this program to test the FIFO in Ubuntu。The main program create a child process to write something ,and then the parent read and print it
/*
communication with named pipe(or FIFO)
@author myqiqiang
@email myqiqiang@gmail.com
*/
#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<errno.h>
#include<fcntl.h>
#include<string.h>
#define FIFO_SERVER "/home/myqiqiang/fifoserver" //fifo directioy
#define BUFFERSIZE 80
void main()
{
pid_t pc;
int flag,fd;
char data[BUFFERSIZE+1];
char* test="a test string";
if(mkfifo(FIFO_SERVER,O_CREAT|O_EXCL)<0) //create fifo
{
printf("create named pipe failed\n");
exit(1);
}
printf("create named pipe sucessfully\n");
pc=fork(); //create process
if(pc==0)
{
memset(data,0,strlen(test));
fd=open(FIFO_SERVER,O_WRONLY,0); //open the fifo
if(fd==-1) //if open failed
{
printf("write:cann't open the named pipe\n");
unlink(FIFO_SERVER);
exit(1);
}
flag=write(fd,test,13); //write data
if(flag==-1) //write failed
{
printf("write data error\n");
unlink(FIFO_SERVER);
exit(1);
}
printf("write data successfully\n");
close(fd); //clsoe fifo
unlink(FIFO_SERVER); //delete fifo
}
else
if(pc>0)
{
memset(data,0,strlen(test));
fd=open(FIFO_SERVER,O_RDONLY,0);
if(fd==-1)
{
printf("read:cann't open the named pipe\n");
unlink(FIFO_SERVER);
exit(1);
}
flag=read(fd,data,13);
if(flag==-1)
{
printf("read data error\n");
unlink(FIFO_SERVER);
exit(1);
}
printf("the data is%s\n",data);
close(fd);
unlink(FIFO_SERVER);
}
else
{
printf("create process error!\n");
unlink(FIFO_SERVER);
exit(1);
}
}
但是,每次执行时都会显示此信息,我确定fifo已创建.
however,it shows this every time i execute,i am sure that the fifo has benn crated .
myqiqiang@ubuntu:~/code/ch03/experiment$ ./3
create named pipe sucessfully
read:cann't open the named pipe
write:cann't open the named pipe
推荐答案
chmod
类型的模式(例如0777
),而不是O_
标志的组合.
The second argument to mkfifo()
should be a chmod
-type mode (e.g. 0777
), not a combination of O_
flags.
您的过程正在创建一个没有足够权限的管道.
Your process is creating a pipe for which it doesn't have sufficient permissions.
这篇关于无法打开FIFO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文