【发布时间】:2011-03-27 06:42:33
【问题描述】:
我在 LINUX 下使用 C++ 进行编程。 我有两个独立的进程。我应该使用命名管道提供通信。
读者: - 使用 mkfifo 创建 FIFO - status = 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。此外,在命令写入之后,我可以在终端上看到应该写入管道的字符串。不知道为什么会显示在终端上……另外,写入的字节数是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 下运行它并发布日志吗?
-
请贴出命名和打开管道的代码,以及你在哪里读/写它。
-
贴出你的代码,当我们看到你的问题时会更容易帮助你。
-
我是 linux 新手,我尝试过使用 strace,但它没有用。我尝试使用 strace read.cpp...我必须在 google 上搜索更多有关 strace 的信息...
-
你应该这样做
strace your_binary
标签: c++ ipc process named-pipes