有没有办法检查外部数据是否通过管道传输到程序或程序是否自行运行

is there a way to check if external data is piped to a program or if program runs on its own?

本文关键字:程序 是否 传输 运行 管道 检查 外部 数据 有没有      更新时间:2023-10-16

即数据已由另一个程序提供,或者用户必须手动键入。我的意思是这两种状态:

dir /b /s *.* | myprogram

myprogram

在第二种情况下,程序将等待用户输入。有没有办法防止这种情况?

POSIX 有 isatty() ,而 Visual C++ 有 _isatty() ,如果文件描述符是终端或命令行,两者都将返回 true,例如 isatty(fileno(stdin)) .

是的。使用 GetStdHandle 获取STD_INPUT_HANDLE,然后通过GetFileType调用句柄来检查句柄在第一种情况下是 FILE_TYPE_PIPE 类型,还是在第二种情况下是FILE_TYPE_CHAR类型。