Я не могу написать в стандартный ввод с помощью / proc / {pid} / fd / 0 - PullRequest
0 голосов
/ 27 июня 2018

У меня есть эта программа:

#include <stdio.h>

int main() {
  char buf[10];
  puts("gimme input:");
  fread(buf, 1, 10, stdin);
  printf("got %s", buf);
}

Когда я запускаю это и открываю другой терминал, я пытаюсь написать в стандартный ввод:

echo "ASDFASDFASDF" > /proc/{pid}/0

ASDFSADFSADF печатается на терминале, на котором запущена моя C-программа, но fread по-прежнему не возвращается, пока я не наберу текст на самом терминале. Он также не печатает текст, который я написал в / proc / {pid} / 0

Что еще мне нужно сделать, чтобы программно вводить текст в stdin?

1 Ответ

0 голосов
/ 27 июня 2018

Если stdin является терминалом, то запись чего-либо в stdin приведет к записи в терминал. Чтение из терминала будет читать все, что введено в терминал, а не то, что записано в терминал. Так работают терминалы.

Если вы хотите, чтобы программа считывала что-то, кроме терминала, вы должны указать, чтобы это произошло. Или, если вы хотите использовать виртуальный терминал, в который вы можете помещать информацию и считывать ее, вы должны указать, что это произойдет.

Вероятно, самое простое решение - создать канал с mkpipe и иметь программу, считываемую из канала, а не из терминала.

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