我有这段代码:
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"是我的职能
答案 0 :(得分:5)
fifo(7)
州的文档:
进程可以在非阻塞模式下打开FIFO。在这种情况下,打开 即使没有人在写入时打开,只读也会成功 但是,只有只写的打开将失败与ENXIO(没有这样的设备 或地址)除非另一端已经打开。
这正是你所做的。您先打开管道进行写入,但尚未打开读取结束。如果您将读/写调用交换为open()
,那么您应该没问题。
我相信你实际上是在调用perror()之前检查open()的返回码。在所有情况下,您应在调用库函数(包括errno
)之前将0
设置为<errno.h>
,因为errno
可能被某些其他库设置为其他值/ {系统调用。
答案 1 :(得分:1)
查看你的代码我真的没有看到任何东西,这告诉我这里有一个错误。至于你得到的印刷信息,你看,首先你必须弄清楚那里的错误真的。为此,您必须检查open()
的返回值。并且只有当返回值指示错误时,perror()
才有意义。