如何使用管道检查是否有文件输入

时间:2011-03-28 03:30:22

标签: c++

我怎么知道命令行是: 。/主要 要么: ./main<文件名

2 个答案:

答案 0 :(得分:2)

一般来说,你不应该注意或关心,但如果你真的需要,你可以使用像

这样的东西
if (isatty(fileno(stdin)))
   // getting input from console
else
   // probably getting input from a file.

isattyfileno都不是C本身的标准化部分,但两者都包含在POSIX中(如果内存服务)并且在大多数非POSIX系统上也可用(例如,在Windows上,虽然MS认为这些名称已被弃用,但建议分别使用_isatty_fileno

答案 1 :(得分:1)

如果您使用的是Unix(POSIX)系统,则可以在标准输入文件描述符上使用fstat()。然后,您可以分析文件类型 - 直到某一点。目前尚不清楚您是否可以可靠且可移植地检测管道输入,但您可以可靠地检测文件和字符设备(可能是终端,除非它是/dev/null)。