c - 当我有类似 "executable < example_file"或“cat xyz | 可执行文件?”时如何检查不正确的标准输入?

标签 c runtime stdin

我有一个用 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/

相关文章:

c - 标准输入中的文件结尾

c - 当函数包含 printf 时打印递归函数返回值

c - 我的 open() 命令没有创建新文件

c - 使用运行时设置的变量来指定字符数组的大小

PHP无需用户按回车键即可获取用户输入

ruby - Ruby 中的 STDIN 和 $stdin 有什么区别?

c - 同名的两个静态变量(两个不同的文件)和外部其中一个在任何其他文件中

c - 如何在不使用模数(%)的情况下打印素数?

java - 我可以在java中动态填充args[]参数吗?

java - 当调用构造函数时会发生什么(在这种情况下概念很清晰)?