我有以下代码。它应该根据命令的数量循环和创建管道。但由于我无法使其正常工作,我目前只使用管道2命令进行测试,每个命令都在单独的进程中运行。问题是底部留有空白链接。我已经读过你必须关闭父母的管道,但我不能让它工作。
int pipeCount = commands- 1;
int fd[pipeCount][2];
createPipes(pipeCount, fd);
for (int i = 0; i < commands; i++) {
pid_t pid;
pid = fork();
if (pid < 0) {
perror("fork");
exit(1);
} else if (pid == 0) {
dupPipes //This function duplicates the pipes to STDIN and STDOUT & closes the pipes correctly
execCommand //Executes the commands properly
} else {
waitpid(-1, NULL, 0);
}
}
此代码工作正常,问题是底部是空白行,无论我在哪里尝试关闭父管道。然后程序停止运行,它不能复制子进程中的管道。
INPUT:
myShell $ ls | tr a-z A-Z
输出:
stuff
stuff2
<BLANK LINE>