嗯,这个主题基本上都是这样说的。
我有一个命令行实用程序,可以使用管道或i / o重定向以交互方式或脚本方式使用。我正在使用cin
和cout
进行i / o,如果输出是控制台,我想在结尾写一个额外的EOL,以便用户提示从下一行开始。在脚本中,这将是有害的。
我可以假设cin == 0, cout == 1
吗?我知道没有干净的方法来获取流的文件描述符。或者是吗?
答案 0 :(得分:16)
如果使用Linux(可能还有其他unix,但绝对不是Windows),你可以试试isatty。
没有直接从C ++流中提取文件描述符的方法。但是,因为在C ++程序中,cout和stdout
都存在并且同时工作(默认情况下C ++提供stdio和iostream方法之间的同步),我认为你最好的选择是{{1 }}
确保isatty(fileno(stdout))
。
答案 1 :(得分:6)
可以使用rdbuf()在程序中更改std :: cin和std :: cout的目标。如果你不这样做,可能很安全地假设cin = 0,cout = 1和clog和cerr都= 2,因为C ++标准声明它们与C stdin,stdout和stderr同步并且那些已经在启动时POSIX那些文件描述符。