Stdin来自键盘或文件

1 c stdin

一个程序可以检测它的标准输入是来自键盘输入还是来自文件的重定向?在c?

Ada*_*eld 7

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

if(isatty(0))
{
    // standard input is a terminal device
}
Run Code Online (Sandbox Code Playgroud)

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