我在 C 中创建了历史命令,它存储和从文件中获取命令。现在我正试图通过管道在它上面运行“头”。即历史| 头-3
为此,我首先 dup2() 将标准输出写入管道末端。然后使用 printf 打印历史记录(obv 不会显示在屏幕上)。现在,我已将标准输入重定向到读取该管道和 execvp() 头命令。它正确显示前 3 行。但它仍在等待用户输入。我必须按 Ctrl C 终止。知道为什么会这样。即使我在显示历史记录后尝试将所有内容刷新到标准输出中。似乎没有任何效果。
pid=fork();
if(pid==0){
if(...first time..){
if(dup2(fd[1],1)<0){
printf("Error in Dup!!");
}
printHistory();
for(k = 0;k < totalfds; k++){
close(fd[k]);
}
return;
}
if(...second time..){
if(dup2(fd[0],0)<0){
printf("Error in Dup!!");
}
}
...
execvp(subcomm[0],subcomm);
...
}