我的管道似乎出了故障(尽管我知道我做错了什么)。我的程序'A1.py'需要来自管道'toA1'的输入,它会处理输入并通过管道'toA2'将输出发送到'A2.cpp'。
“A2.cpp”需要从管道“toA2”输入,并将其输出发送到屏幕(默认标准输出)。你知道吗
一旦'A2.cpp'通过execv()运行,它仍然从用户那里获取输入(当它应该从管道'toA2'获取输入时)。第二个fork中的变量“use\u input”说明了这一点。当下列行运行时:
std::cout << use_input << std::endl;
程序打印到“blank”屏幕上,这是变量“use\u input”中的内容。你知道吗
我不确定到底出了什么问题,因为A1.py可以正常工作(管道'toA1'可以正常工作,不确定输出到管道'toA2'是否正常。
我用1.py发送给stdout系统标准输出写入()'.
A3.cpp公司:
int main(int argc, char **argv) {
pid_t child_pid;
char* empty_arg1[2];
empty_arg1[0] = "A1.py";
empty_arg1[1] = nullptr;
char* empty_arg2[2];
empty_arg2[0] = "A2";
empty_arg2[1] = nullptr;
int toA1[2]; int toA2[2]; pipe(toA1); pipe(toA2);
child_pid = fork();
if (child_pid == 0) {
dup2(toA1[0], STDIN_FILENO); //A1 gets stdin from pipe 'toA1'
close(toA1[0]);
close(toA1[1]);
dup2(toA2[1], STDOUT_FILENO); //sends stdout to pipe 'toA2'
close(toA2[0]);
close(toA2[1]);
return execvp("./A1.py", empty_arg1);
}
child_pid = fork();
if (child_pid == 0) {
std::string use_input = "blank";
dup2(toA2[0], STDIN_FILENO); //A2 gets stdin from pipe 'toA2'
close(toA2[0]);
close(toA2[1]);
std::cout << "use_input[1] = " << use_input << std::endl;
return execv("./A2", empty_arg2);
}
dup2(toA2[1], STDOUT_FILENO); //Sends output to 'toA2'
close(toA2[0]);
close(toA2[1]);
while (!std::cin.eof()) {
getline(std::cin, user_input);
std::cout << user_input << std::endl;
}
return 0;
}
A1.py型:
def main():
.....
sys.stdout.write("V " + str(len(vertex_list)) + "\n")
sys.stdout.write(str_edges + "\n")
if __name__ == '__main__':
main()
在A2.cpp中,文件开头是:
std::string use_input = "NOPE";
std::cerr << "A2 is running" << std::endl;
std::cin >> use_input;
std::cout << "use_input[2] = " << use_input << std::endl;
当我运行驱动程序A3.cpp时,A3.cpp等待用户输入“getline(std::cin,user_input);”。这会将其传递到A2.cpp,如“std::cin>;>use\u input;”所示
有时从A1到A2的管道打开,A1产生的所有输出突然涌入…A2.cpp将所有输出都输出到屏幕上,而它应该每5秒输出一次数据,因为它每5秒提供一次数据
我不太清楚这里的错误是什么,但我已经有几天没弄清楚了。我想A2.cpp在切换输入时应该只从管道'toA2'获取输入。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐