Fifo开幕问题C.

时间:2015-06-29 10:44:05

标签: c fifo

我有这段代码:

mkfifo ("bPipe", 0660); /* Create named pipe */


int fd1 = open ("bPipe", O_WRONLY|O_NONBLOCK); /* Open named pipe for writing */

perror("FD1");

int fd = open ("bPipe", O_RDONLY|O_NONBLOCK); /* Open it for reading */

 perror("FD");

char*mex="Hello world\n\0";

write (fd1,mex , getStringLenght(mex)+1); 

char* result = readline(fd1);

printf("Rc %s : \n",result);

我正在用C学习FIFO,我尝试创建两个FIFO,但在打开它之后我得到了这两个错误:

FD1:Device not configured
FD:Device not configured

我不明白为什么。

P.S" readLine"和" getStringLenght"是我的职能

2 个答案:

答案 0 :(得分:5)

fifo(7)州的文档:

  

进程可以在非阻塞模式下打开FIFO。在这种情况下,打开          即使没有人在写入时打开,只读也会成功          但是,只有只写的打开将失败与ENXIO(没有这样的设备          或地址)除非另一端已经打开。

这正是你所做的。您先打开管道进行写入,但尚未打开读取结束。如果您将读/写调用交换为open(),那么您应该没问题。

我相信你实际上是在调用perror()之前检查open()的返回码。在所有情况下,您应在调用库函数(包括errno)之前将0设置为<errno.h>,因为errno可能被某些其他库设置为其他值/ {系统调用。

答案 1 :(得分:1)

查看你的代码我真的没有看到任何东西,这告诉我这里有一个错误。至于你得到的印刷信息,你看,首先你必须弄清楚那里的错误真的。为此,您必须检查open()的返回值。并且只有当返回值指示错误时,perror()才有意义。