c - 流打印和重定向

标签 c redirect printf stdout

我有一个程序打印(通过 printf)到 stdout 一些数据并调用函数 *foo* 它还将一些数据打印到 stdout [从 foo 完成打印的方式(实现)是未知的,我看不到 foo 的代码]。

我必须将所有内容从 stdout 重定向到 buffer 或文件。我尝试了几种方法

  1. freopen(file.txt, stdout) - 只有我的代码打印被写入 file.txt。从 foo 打印的内容丢失了。
  2. setbuf(buffer, stdout) - 只有我的代码打印被写入缓冲区。从 foo 打印的内容出现在标准输出中。(它出现在屏幕上)

什么可以解释这种行为?问题如何解决?

注意:此代码必须在跨操作系统(lunux/wind && mac OS)中工作。我使用 gcc 来编译代码,我有 cygwin

最佳答案

很可能 foo 没有使用 stdio 进行打印并为此直接调用操作系统。

我不知道 win32,但在 POSIX 上你可以使用 dup2照顾它。

/* Before the function foo is called, make `STDOUT_FILENO` refer to `fd` */
int fd;
fd = open(...);
dup2(fd, STDOUT_FILENO);

编辑

令我惊讶的是, win32 has _dup2 但它还有其他作用。

关于c - 流打印和重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125607/

相关文章:

c - 在没有库函数,数组或内存管理的情况下,将C中的char添加到char *中

c - MSVS 命令行参数

php - 在没有模板的情况下在 Zend Framework 2 中进行重定向

.htaccess - 网站 self 推荐

java - Java 中奇怪的 printf() 行为

c - 程序不读取和打印字符

c - OpenCL 命令队列 (CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) 不工作 (MacOS)

c# - 类似 translit.net 但在 autohotkey 上

ruby-on-rails - 在 ruby​​-on-rails 中重定向 POST 请求会导致闪存哈希被清除

c - sprintf 写入字符串\n