printf的重定向与恢复

本文探讨了在Windows和Linux环境下如何实现printf的输出重定向,包括在多线程环境中如何管理和恢复输出流,以便在不同线程间控制打印信息的目的地。
摘要由CSDN通过智能技术生成

把行信息打印到stdio窗口,然后再有一行到文件,接着又有一行到stdio屏幕。
先来看一个错误的例子




#include <ansi_c.h>
int main (int argc, char *argv[])
{
FILE *copy;




printf ("This is printed to screen!\n");
copy = stdout;
stdout = fopen ("stdio test.txt", "w");
printf ("This is printed to a file!\n");
fclose (stdout);
stdout = copy;
printf ("Where is this line?\n");
return 0;
}
类似于copy = stdout;直接的赋值是不可行的,应该要用dup,dup2,正确的应该是下面这样的




#include <stdio.h>
#ifdef unix
#include <unistd.h>
#endif
#ifdef WIN32
#include <io.h>  
#define fileno _fileno
#defi
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
printf重定向是指将printf函数的输出从默认的显示器改为其他设备或文件。在C语言中,可以通过重定义fputc函数来实现printf重定向。具体来说,可以通过重定义fputc函数将printf的输出重定向到串口、文件或其他设备上。 示例代码中使用了freopen函数来实现printf重定向。首先,通过调用freopen函数将标准输出(stdout)重定向到指定的文件或设备。例如,可以将printf的输出重定向到USART1串口,这样就可以将单片机的数据打印到PC上的超级终端或串口调试助手。然后,通过再次调用freopen函数将标准输出恢复为默认的显示器。 需要注意的是,重定义fputc函数是实现printf重定向的关键。在重定义的fputc函数中,可以将printf的输出数据重定向到指定的设备或文件,例如将数据重定向到ITM端口。 总结起来,printf重定向是通过重定义fputc函数来实现的,可以将printf的输出从默认的显示器改为其他设备或文件。 #### 引用[.reference_title] - *1* [printf函数的重定向](https://blog.csdn.net/weixin_51121577/article/details/127337297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [printf重定向的相关总结](https://blog.csdn.net/gogo0707/article/details/124652111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值