我正在用C++编程,在LINUX下。 我有两个独立的进程。我应该使用命名管道提供通信。命名管道 - 写入()和读取()的问题
读卡器: - 创建使用FIFO mkfifo - 状态= mkfifo(myFIFO,0666) 使用开 - 打开所述管 - FIFO =开放(myFIFO,O_RDONLY)从管 -reads - NUM =读(FIFO, temp,sizeof(temp))
Writer: -opens pipe - fifo = open(myFIFO,O_WRONLY); - 写入管道 - num =写入(fifo,string,strlen(string));
我注意到,读取进程 返回的文件描述符和写入过程都是0.另外,在写入命令后,我可以在我的终端上看到应该写入管道的字符串。我不知道它为什么显示在终端上...此外,写入的字节数为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下运行它并发布日志吗? – jpalecek 2010-08-09 12:29:49
请将管道命名并打开的代码以及读/写的位置发布。 – James 2010-08-09 12:34:25
发布你的代码,当我们看到你的问题时,它会更容易帮助你。 – 2010-08-09 12:45:11