我正在使用LINUX下的C++编程。我有两个独立的进程,需要使用命名管道进行通信。
读者: - 使用mkfifo创建FIFO - 状态=mkfifo(myFIFO, 0666) - 使用open打开管道 - fifo=open(myFIFO, O_RDONLY) - 从管道中读取 - num=read(fifo, temp, sizeof(temp))
写者: - 打开管道 - fifo=open(myFIFO, O_WRONLY); - 向管道中写入数据 - num=write(fifo, string, strlen(string));
我注意到读进程和写进程返回的文件描述符都是0。此外,在执行write命令后,我可以在终端上看到应该写入管道的字符串。我不知道为什么会在终端上显示它...另外,写入的字节数为0...
请问您能帮帮我吗? 谢谢!!!
// read.cpp:
#define myFIFO "/temp/FIFO"
int main(){
int num, fifo, status;
char temp[32];
if (status = mkfifo(myFIFO, 0666) < 0) {
printf("\n %s \n", strerror(errno));
return 0;
}
if (fifo = open(myFIFO, O_RDONLY) < 0) {
printf("\n %s \n", strerror(errno));
return 0;
}
if (num= read(fifo, temp, sizeof(temp)) < 0) {
printf("\n %s \n", strerror(errno));
return 0;
}
printf("In FIFO is %s \n", temp);
}
在另一个文件中:
// write.cpp:
#define myFIFO "/temp/FIFO"
int main() {
int status, num, fifo;
char string[]="Testing...";
if (fifo = open(myFIFO, O_WRONLY) < 0) {
printf("\n %s \n", strerror(errno));
return 0;
}
if (num= write(fifo, string, strlen(string)) < 0) {
printf("\n %s \n", strerror(errno));
return 0;
}
}
strace your_binary
。 - jpalecek