那么,这个问题基本上是这么说的。
我有一个命令行实用程序,可以使用pipe道或I / Oredirect交互或脚本使用。 我正在使用cin
和cout
进行I / O操作,并且如果输出是控制台,我想在末尾编写一个额外的EOL,以便用户提示符将从下一行开始。 在脚本中这将是有害的。
我可以假设cin == 0, cout == 1
吗? 我知道没有干净的方式来获取stream的文件描述符。 还是呢?
可以使用rdbuf()在程序中更改std :: cin和std :: cout的目标。 如果你不这样做,那么假设cin = 0,cout = 1,clog和cerr both = 2是很安全的,因为C ++标准规定它们与C stdin,stdout和stderr同步, POSIX启动时的这些文件描述符。
如果使用Linux(也可能是其他Unix,但绝对不是Windows),你可以尝试isatty 。
没有直接的方式从C ++流中提取文件描述符。 然而,因为在一个C ++程序中,cout和stdout
存在并且同时工作(C ++默认提供了stdio和iostream方法之间的同步),所以我认为最好的办法是做一个isatty(fileno(stdout))
。
确保你#include <unistd.h>
。