1

Can a program detect if it's stdin is coming from keyboard input vs. being redirected from a file? in c ?

4

1 回答 1

7

是的,在大多数系统上。在 POSIX 系统(Linux、Mac OS X、BSD 等等)上,您可以isatty(3)在文件描述符 0(标准输入)上使用该函数。在 Windows 上,您可以使用_isatty. 例如:

if(isatty(0))
{
    // standard input is a terminal device
}

请注意,许多程序用于isatty更改其输出缓冲行为:如果标准输出是终端,则输出是行缓冲的(例如,在每个换行符打印后刷新),而如果标准输出不是终端,则它是完全缓冲的(例如仅当缓冲区已满、进程正常退出或应用程序显式刷新流时才会刷新它)。

于 2012-05-22T18:57:15.333 回答