Завершить программу C, с которой stdin связан с выводом другой программы - PullRequest
0 голосов
/ 07 марта 2019

У меня есть программа x, которую я хочу чисто завершить.Вы можете запустить его, просто выполнив ./x и использовать терминал для прямой записи строк в stdin и завершить его, написав exit.

Однако, если вы используете: cat file.txt | ./x, stdin теперь передается из файла, и поэтому вы никогда не сможете набрать exit.

Лучший способ завершить эту программу - автоматически завершить ее после прочтения последней строки из файла.

В качестве альтернативы, я бы хотел перенаправить stdin обратно к терминалу, если это вообще возможно, чтобы дополнительно разрешить ручной ввод, как раньше.

Вот пример кода:

int main() {
  // ...
  while (ongoing) {

    size_t n = 0;
    char* ln = NULL;

    getline(&ln, &n, stdin);

    strtok(ln, "\n");
    strtok(ln, "\r");

    if (strcmp("exit", ln) == 0) {
      break;
    }
    //...
  }
}

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

вы используете getline для чтения вашего ввода.getline возвращает -1 в EOF.Это облегчает.

if (-1==getline(...))
   break;
1 голос
/ 07 марта 2019

Когда вы прочитали все входные данные из канала, EOF будет повышен, чтобы указать, что полный вход был достигнут.В вашем примере это будет примерно эквивалентно выходу, так что вы также можете проверить возвращаемое значение getline, чтобы увидеть, достигнуто ли EOF (в этом случае будет возвращено -1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...