我正在尝试创建一个调用某个程序或进程的子代。父级通过两个管道从子级写入和读取一些数据。我的代码编译并运行,但输入中没有文本。我究竟做错了什么?我没有正确关闭管道,写管道或正确输出数据吗?
#include <iostream>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
int main(){
int pipedes1[2],pipedes2[2];
char buff[256];
string text = "Hello";
pid_t pid;
pipe(pipedes1);
pipe(pipedes2);
pid = fork();
if(pid > 0){
close(pipedes1[1]);
close(pipedes2[0]);
dup2(pipedes2[1], STDOUT_FILENO);
dup2(pipedes1[0], STDIN_FILENO);
execve("/home/pi/Test", NULL, NULL);
} else {
close(pipedes1[1]);
close(pipedes2[1]);
write(pipedes1[0], text.c_str(), text.length());
while((len = read(pipedes2[0], buff, 256)) != 0){
cout << buff << endl;
}
close(pipedes2[0]);
close(pipedes1[0]);
}
return 0;
}
还有我的“chield”计划:
int main(){
string str;
cin >> str;
str = "echo " + str + " >> /home/pi/1";
cout << str << endl;
return 0;
}
前卫的输出:
echo&lt;&lt; /家庭/ PI / 1
我发现问题write()返回-1。 但我不知道为什么?
答案 0 :(得分:0)
write(pipedes1[0], text.c_str(), text.length());
您正在写入管道的读取端。
除此之外,您的应用程序受到死锁的威胁。如果你试图写这么多管道缓冲区填满,并且孩子产生如此多的数据,管道缓冲区也填满了怎么办?然后两个进程都在等待另一个进程耗尽缓冲区,但它们都被阻塞在write
!