Как проверить неверный стандартный ввод, когда у меня есть что-то вроде «исполняемый файл <пример_файла» или «исполняемый файл cat xyz |? - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть программа, написанная на c, которая вызывается как:

"my_program arg1 arg2 argc < example_file". 

или

"cat text_file | my_program arg1 arg2"

У меня есть следующий код ниже:

FILE *fp = fopen("/dev/stdin", "r");
int KMAX = 1024;
char t [KMAX]; 
iff (fgets(t, KMAX, fp) != NULL) {
     ......

Это прекрасно работает, если пользователь действительно вводит данные.Однако, если я просто вызову программу, как:

my_program arg1 arg2 arg3

Она просто зависает и ждет ввода пользователя.Как лучше всего читать со стандартного ввода в этих двух случаях?Я думал, что проверка на Null сработает, но, похоже, не сработает.Обычно я просто проверяю, существует ли текстовый файл, но это сработает только для первого способа выполнения программы, а не для второго.Любые предложения будут оценены.

1 Ответ

2 голосов
/ 10 февраля 2012

Самый простой способ - просто использовать isatty () в stdin.

if (isatty(fileno(stdin)))
    printf("terminal\n");
else
    printf("pipe\n");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...