前提:实现一个 C++ 程序,提示用户输入 2 个命令。每个输入字符串应该是一个 UNIX 命令,允许使用参数。例如,输入 1 可以是“ls -l”,输入 2 可以是“wc -l”。然后程序将创建一个管道和两个子进程。第一个子进程将运行第一个输入中指定的命令。它将输出到管道而不是标准输出。第二个子进程将运行第二个输入中指定的命令。它将从管道而不是标准输入中获取其输入。父进程将等待其两个子进程完成,然后整个过程将重复。当第一个命令输入“quit”时,执行将停止。
我相信我几乎完成了这个程序,但是我在弄清楚如何让用户输入在管道中执行时遇到了麻烦,我最终遇到了语法错误。
到目前为止,这是我的代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <cstring>
using namespace std;
int main() {
//Declare Variables
char first, second[80];
int rs, pipefd[2];
int pid1, pid2;
char *command1[80], *command2[80];
//Asking for the commands
cout << "Please enter your first command(incl. args) or quit: ";
cin >> first;
//Do the program while the first answer isn't quit
while(first[0] != 'quit') {
//Copy first answer into first command
strcpy(command1, ((char*)first);
//Just skip to end of program if first command is quit
cout << "Please enter your second command(incl. args): ";
cin >> second;
//Copy second answer into second command
strcpy(command2, ((char*)first);
//pipe
rs = pipe(pipefd);
//if pipe fails to be made
if(rs == -1){
perror("Fail to create a pipe");
exit(EXIT_FAILURE);
}
//Fork for the two processes
pid1 = fork();
if (pid1 != 0){
pid2 = fork();
}
if(pid1 == -1){
perror("Fail to create a pipe");
exit(EXIT_FAILURE);
}
if(pid2 == -1){
perror("Fail to create a pipe");
exit(EXIT_FAILURE);
}
if (pid1 == 0) { // 1st child process
// close write end of pipe
close(pipefd[0]);
// duplicate
dup2(pipefd[1], 1);
//execute the input argument
execvp(command1[0], command1);
}
if (pid1 == 0) { // 2st child process
// close write end of pipe
close(pipefd[0]);
// duplicate
dup2(pipefd[1], 1);
//execute the input argument
execvp(command2[0], command2);
}
else { // parent process
// close read end of pipe
close(pipefd[0]);
// wait for child processes
wait(&pid1);
wait(&pid2);
}
//Asking for the commands
cout << "Please enter your first command(incl. args) or quit: ";
cin >> first;
}; //end of while()
return 0;
}
任何帮助/提示将不胜感激,因为这将在不久的将来到期,我很想最终解决这个问题。
编辑:添加得到的错误
In function int main()':
z1674058.cxx:26:33: error: expected ')' before ';' token
z1674058.cxx:33:33: error: expected ')' before ';' token