gpt4 book ai didi

c++ - 使用两个不同的管道c++以相同的进程读取和写入

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:58 27 4
gpt4 key购买 nike

我正在尝试创建一个调用某些程序或进程的子进程。 parent 通过两个管道从 child 那里写入和读取一些数据。我的代码编译并运行,但输入中没有文本。我究竟做错了什么?我是否没有正确关闭管道、写入管道或正确输出数据?

#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;
}

还有我的“child”程序:

int main(){
string str;
cin >> str;
str = "echo " + str + " >> /home/pi/1";
cout << str << endl;
return 0;
}

程序的输出:

echo << /home/pi/1

我发现一个问题 write() 返回 -1。但我不知道为什么?

最佳答案

write(pipedes1[0], text.c_str(), text.length());

您正在写入管道的读取端。

除此之外,您的应用程序会受到死锁的威胁。如果您试图写入太多数据以至于管道缓冲区被填满,而子进程产生的数据太多以至于其管道缓冲区也被填满怎么办?然后两个进程都在等待对方耗尽缓冲区,但它们都在 write!

中被阻塞

关于c++ - 使用两个不同的管道c++以相同的进程读取和写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348570/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com