【发布时间】:2013-12-25 16:25:39
【问题描述】:
我看到我可以做 freopen 将标准输出重定向到一个控制台到另一个 tty。我正在尝试将其重定向到包括控制台在内的多个终端。控制台是程序运行的地方。最好的方法是什么?
TIA
【问题讨论】:
标签: c linux filesystems system
我看到我可以做 freopen 将标准输出重定向到一个控制台到另一个 tty。我正在尝试将其重定向到包括控制台在内的多个终端。控制台是程序运行的地方。最好的方法是什么?
TIA
【问题讨论】:
标签: c linux filesystems system
您没有指定您使用的平台,但假设您可以找到要重定向到的 TTY 的文件路径,您可以在 stdout 文件描述符上调用 freopen。但是,这会关闭初始文件描述符,这听起来不像您想要的行为。一个文件描述符只能指向一个文件。
最简单的 C 解决方案可能是 printf 的包装器,它在所有指定的文件上调用它。你也许可以用线程做一些事情,但这可能会使事情复杂化。
如果您使用的是 *nix 系统,我建议使用 tee 来输出到标准输出和辅助文件。
【讨论】:
tee。如果您希望它是可编写脚本的(./foo 而不是./foo | tee /dev/ttyA /Dev/ttyB...,您可以调用 fork、dup2 和 exec 来调用 tee。
没有像freopen 这样的简单方法。您需要一些包装器来接收输入并将其分别写入每个输出 tty。
例如,tee 程序将其输入多路复用到标准输出和许多文件。例如,您可以在 C 中创建一个连接到tee /dev/ttyX /dev/ttyY ... 的管道。然后你可以用管道文件描述符替换标准输出,你会得到想要的行为。
【讨论】: