如何区分管道和交互式标准输入

时间:2013-09-29 20:43:23

标签: c

到目前为止,我知道如果文件名参数(fname)为空,程序会自动读取stdin

if (!strcmp(fname, ""))
    fin = stdin;

但是我需要知道stdin是管道输入还是互动,因为我可能会得到类似的东西:

rsm: reading from (stdin)
^Z
rsm:(stdin):1: not an attribute: `√┘2ç∩'

如果使用了交互式输入。我可以使用某种库函数吗?

1 个答案:

答案 0 :(得分:4)

在Posix系统上,您可以使用isatty

#include <stdio.h>
#include <unistd.h>

if (isatty(STDIN_FILENO))
{
    // interactive stdin
}

在Windows上,您可以使用相应的功能_isatty