我正在用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