Я сделал команду history в C, которая хранит и выводит команды в/из файла. Теперь я пытаюсь запустить «голову» над ним по трубопроводам. История | head -3Труба с командой printf
Для этого у меня есть первый dup2() stdout, чтобы написать конец трубы. Затем используется printf для печати истории (которая не будет отображаться на экране). Теперь после этого я перенаправил stdin, чтобы прочитать эту команду и команду execvp(). Он отображает верхние 3 строки правильно. Но он все еще ждет ввода пользователя. Я должен закончить с помощью Ctrl C. Любая идея, почему это происходит. Даже я попытался сбросить все в stdout после отображения истории. Ничто не работает.
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);
...
}
Где код? Почему [tag: shell] указан? – sehe
Его реализация оболочки в C. Вот почему. Я думаю, что код не потребуется, я его отредактирую. – rocker
Это, вероятно, больше связано с тем, как работает 'head', чем что-либо. Как он ожидает завершения своего ввода? – Duck