Подача входного потока с EOF - PullRequest
0 голосов
/ 27 мая 2009

Я создаю небольшой интерпретатор оболочки, который выполняет различные команды, и я выполняю это, разворачивая свой процесс.

Однако я хочу, чтобы дочерний процесс прекратил ожидание ввода в стандартном потоке ввода, и он делает это, ожидая EOF. Как я намеренно помещаю EOF в этот поток?

Более конкретно, если я зацикливаюсь на этом условии:

while (fgets(&input, 1024, stdin) != NULL) { // .....

Как я могу заставить его стать ложным?

Ответы [ 3 ]

1 голос
/ 27 мая 2009

Не уверен в том, что делает ваша оболочка - но я бы подумал, что способ сделать это - закрыть «стандартный поток ввода» на дочерней стороне fork() и затем не потрудиться читать из него снова. Если вы заставили ребенка сделать что-то, почему он возвращается в основной цикл обработки ввода.

В коде псевдо

if (pid = fork())
{
    // parent - wait for child to do it's thing and then process another command
}
else
{
    // child
    close(0);
    // do some sort of command processing and then exit 
}
1 голос
/ 27 мая 2009

Обычный метод - закрыть поток на отправляющем (родительском) конце.

0 голосов
/ 27 мая 2009

Разве вы просто не закроете другой конец трубы?

...