我有一个用 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 会起作用,但似乎不起作用。通常我只会检查文本文件是否存在,但这仅适用于第一种执行程序的方式,而不适用于第二种。如有任何建议,我们将不胜感激。
最佳答案
最简单的方法就是使用 isatty()在标准输入上。
if (isatty(fileno(stdin)))
printf("terminal\n");
else
printf("pipe\n");
关于c - 当我有类似 "executable < example_file"或“cat xyz | 可执行文件?”时如何检查不正确的标准输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9221368/