c-当没有任何管道连接到标准DIN时,检查

c-当没有任何管道连接到标准DIN时,检查,c,stdin,pipe,C,Stdin,Pipe,基本上,当调用程序时,我试图检查stdin中是否有任何内容,因此如果我有另一个名为output的文件写入stdout,那么 /output |./program应该工作,并且/program应该带错误退出在POSIX中,您可以使用。isatty检查tty,而不是管道。改用fstat(STDIN\u FILENO,&sb)并检查S\u ISFIFO(sb.st\u模式) 要检查stdin中是否有您可能读取的内容,您可以使用事件掩码为POLLIN的poll(2),据我所知,如果程序正在从tty读取,

基本上,当调用程序时,我试图检查stdin中是否有任何内容,因此如果我有另一个名为output的文件写入stdout,那么
/output |./program
应该工作,并且
/program
应该带错误退出

在POSIX中,您可以使用。

isatty
检查tty,而不是管道。改用
fstat(STDIN\u FILENO,&sb)
并检查
S\u ISFIFO(sb.st\u模式)


要检查stdin中是否有您可能读取的内容,您可以使用事件掩码为
POLLIN

poll(2)
,据我所知,如果程序正在从tty读取,OP希望生成错误,因此isatty是一个很好的答案。输出|程序和程序<文件都将失败。另外,我不确定您是否可以测试管道输入。@lhf:我刚刚给出了测试管道的方法。(这在一定程度上取决于实现。如果管道机制像DOS一样使用临时文件,那么当然不会触发。)