余有两个过程,服务器和一个客户端,这应该通过管道(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);
编辑
我没有提到行#define FIFO_NAME "MYFIFO"
...这里是问题:作为乔迪Hagins说,该路径是相对的一个,并从不同的文件夹被启动的进程,他们试图打开不同的文件。