我有两个进程,一个服务器和一个客户端,它们应该通过管道(C++,Linux)进行通信。
服务器打开管道O_RDONLY
标志,以及客户端O_WRONLY
。
然而,服务器阻塞在open
函数,而客户端似乎运行成功(open
函数返回成功,因此write
功能)。
我读过,如果O_NONBLOCK
设置标志后,读取功能将继续,但如果没有客户端连接,我不希望它继续 - 可以阻止直到客户端连接上,但就我而言,即使客户端完成运行后它仍然被阻止......
你能告诉我我做错了什么吗...?
这是代码:
// Server side
int pipe;
int status, nr_read = 0;
status = mkfifo(FIFO_NAME, 0666);
if (status < 0)
{
// If the file already exists, delete it
unlink(FIFO_NAME);
// Try again
status = mkfifo(FIFO_NAME, 0666);
if(status < 0)
{
printf("mkfifo error: %d\n", status);
return status;
}
}
pipe = open(FIFO_NAME, O_RDONLY);
printf("Never gets here...\n");
[...]
nr_read = read(pipe, my_char_array, CHAR_ARRAY_SIZE);
[...]
close(pipe);
unlink(FIFO_NAME);
它永远不会到达“printf”行......
// Client side:
int pipe, nr_sent = 0;
int status = 0;
pipe = open(FIFO_NAME, O_WRONLY);
if (pipe < 0)
{
printf("open fifo error: %d\n", status);
return pipe;
}
[...]
nr_sent = write(pipe, my_char_array, CHAR_ARRAY_LENGTH);
[...]
close(pipe);
EDIT
我没有提到这条线#define FIFO_NAME "MYFIFO"
...这就是问题所在:
正如乔迪·哈金斯所说,路径是相对的,进程是从不同的文件夹启动的,他们试图打开不同的文件。