ファイルとの間でコマンドを保存およびフェッチする履歴コマンドをCで作成しました。今、パイプで「頭」を走らせようとしています。つまり歴史 | 頭-3
そのために、最初に dup2() パイプの終わりを書き込むための stdout があります。次に、printf を使用して履歴を出力しました (obv は画面に表示されません)。その後、標準入力をリダイレクトして、そのパイプと execvp() head コマンドを読み取りました。上位 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);
...
}