【发布时间】:2020-08-26 14:37:48
【问题描述】:
我将一个 C/C++ 库包装在一个 Rust 板条箱中并使用 FFI 调用它(我 不 使用子进程)。
这个库记录到 stdout/stderr(例如使用 printf() 或 std::cout),但我想“捕获”这个输出并使用 Rust 的 log crate 来控制输出。
是否可以将 FFI 调用的 stdout/stderr 重定向到 log?
【问题讨论】:
-
您可以完全阻止 any 输出到 stdout / stderr 吗?
-
是的,但您可能需要使用不安全且特定于操作系统的代码。例如,在类 Unix 的 OS-es 上,您可以使用
dup2()将标准输出重定向到管道,从后台 Rust 线程读取该管道,并酌情调用log。 -
我可以接受 all 输出被重定向;我希望生锈部分“管理”日志记录...重定向标准输出(使用
dup2())是否也会更改生锈代码?我会说是的...... -
是的,但是您可以在 FFI 代码完成后撤消该效果。 (撤消它相当便宜,归结为几个系统调用。)您还必须小心 Rust 日志记录延迟输出,直到 hack 被撤消,否则它可能会进入无限循环。
标签: rust