【问题标题】:Does it make sense to try and reopen a tty in binary mode?尝试以二进制模式重新打开 tty 是否有意义?
【发布时间】:2013-01-28 14:55:21
【问题描述】:

我偶然发现了这段 C 代码。它使用freopen以二进制模式重新打开stdin:

if (!isatty(STDIN_FILENO))
    freopen(NULL, "rb", stdin);

我不明白 isatty 测试从何而来。这是否意味着重新打开终端没有意义?

省略 isatty 测试,离开会有什么问题

freopen(NULL, "rb", stdin);

【问题讨论】:

  • 在 Unix 上使用 'b' 不会造成任何损害,但也不会改变。
  • 在文本和二进制模式没有区别的 Unix 上不需要此代码。知道这段代码是否真的适用于 Win32 是另一个问题的主题:) link
  • 如果您担心 Windows,请非常担心。如果您不关心 Windows,那么您可以无条件地执行freopen(),它不会有任何区别,但不会造成任何损害。整个测试仅在二进制文件和文本文件之间存在差异的系统(也称为 Windows)上才有意义,并且链接的问题表明存在特定于 Windows(无论如何非 POSIX)的函数 setmode() 来执行所需的操作其中显示的freopen() 会导致“未定义的行为”,应该在运行时捕获某种异常处理程序。
  • 关于更改二进制/文本模式,old.nabble.com/…有讨论

标签: c freopen


【解决方案1】:

isatty() 函数是POSIX standard

如果您想确保以二进制模式处理正在读取的文件(我想是通过 shell 输入重定向),我想这样做是有意义的。

【讨论】:

    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多