c++输出重定向 linux,C++ stderr/stdout 重定向到文件

通常,stderr和stdout被用来输出内容显示到屏幕,但是,有时候我们需要把这些信息写到指定的文件,方便随时查阅。最简单的实现方式就是,把 stderr/stdout 的输出重定向到文件。

stderr/stdout 重定向到文件

这里以stderr代码说明。

#include

#include

int main( void )

{

FILE *stream = freopen( "freopen.out", "w", stderr );

if( stream == NULL )

fprintf( stdout, "error on freopen\n" );

else

{

fprintf( stdout, "successfully reassigned\n" ); fflush( stdout );

fprintf( stream, "This will go to the file 'freopen.out'\n" );

fprintf( stderr, "Also you can do it like this!\n" );

fclose( stream );

}

// windwos下读取文件 freopen.out

system( "type freopen.out" );

getchar();

return 0;

}

执行结果如下,

5ca009214a7d00f0bf51b4fe83f3adfe.png

stderr与stdout的区别

stdout(标准输出),输出方式是行缓冲。输出的字符会先存放在缓冲区,等按下回车键时才进行实际的I/O操作。

stderr(标准出错),是不带缓冲的,这使得出错信息可以直接尽快地显示出来。

关于缓冲的说明:

类型

说明

输出情况

满缓冲

I/O操作只有在缓冲区被填满之后才会进行

1.缓冲区满

2.刷出数据 (fflush)

3.关闭文件 (fclose)

行缓冲

通常只有遇到换行符时,才会执行实际的I/O操作;但缓冲区满也会强制执行

1.遇到换行符

2.缓冲区满

3.刷出数据 (fflush)

4.关闭文件 (fclose)

无缓冲

不缓存,直接进行I/O操作

直接输出

然而就缓冲来说,stdout与stderr没有绝对的区别,因为缓冲类型可以设定。这里要借助 setvbuf() 或 setbuf() 函数。

#include

#include

int main( void )

{

char buf[512] = {0};

setbuf(stderr, buf);

fprintf(stderr, "It is error 1\n");

printf("echo 1\n");

fprintf(stderr, "It is error 2\n");

printf("echo 2\n");

fprintf(stderr, "It is error 3\n");

fflush(stderr);

getchar();

return 0;

}

运行结果如下:

91788f30e4959564caf5db093d334367.png

这样,我们就可以定义缓冲区大小。缓冲区默认大小由 stdio.h 头文件中的宏 BUFSIZ 定义,是512字节。另外,查阅一些资料说最小不能低于256字节,但测试例子没有这个问题(暂时没有深究)。

setvbuf() 与 setbuf()

setvbuf() 函数原型如下:

int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );

setbuf() 可以当作是调用setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZE);

其中, mode是声明缓冲的类型,如下几个:

_IOFBF

满缓冲

_IOLBF

行缓冲

_IONBF

无缓冲

size是缓冲区大小,单位字节。

/* setvbuf example */

#include

int main ()

{

FILE *pFile=fopen ("myfile.txt","w");

setvbuf ( pFile , NULL , _IOFBF , 1024 );

// File operations here

fclose (pFile);

return 0;

}

0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自己帮别人写的网站可以公开源码吗_专注爬虫:20个精心总结爬虫项目,爬虫技术这里强(附源码)...

写在前面你想成为Python爬虫的高手么?你想爬取你想要的高质量数据么?那么你得需要进行爬虫项目的演练,那样你才有可能在Python爬虫的道路上走的更远小编在这里精心总结了20个爬虫项目的演练,是目前爬虫高手一直专注的领域。小编将…

HDL的综合和c语言的编译区别,C语言与verilog 的区别及相互转化

1,面对C语言比verilogHDL更加成熟,而且更加可靠,因为verilog的编译,查错工具大都是商业软件,因此没有像C语言一样得到广泛的应用,各种缺陷也较C来说 较多。基于这样的原因,在设计算法的硬件电路块时&#x…

linux几秒钟同步一次,Linux时间同步配置方法

由于是在做mongoDB的实验中再一次的遇到了mongos路由节点同步时由于ntp时间的问题导致同步非常的慢。故写了个时间同步的语句>while :; do rdate -s 192.168.109.129; sleep 2s; done > /dev/null 2>&1 &rdate: couldnt connect to host 192.168.109.129: Con…

c语言 socket 报文解析,C语言实现Socket简单通信

环境是linux,不过应该没什么影响,因为只用到了socket的基本用法,没有涉及pthread等。分为服务器端和客户端,服务器端监听端口发来的请求,收到后向客户端发送一个Hello World,客户机负责发送消息并打印收到的Hello Worl…

不思议迷宫c语言基础,不思议迷宫神龙收藏品一览

不思议迷宫神龙收藏品一览是9K9K小编柚子人为大家带来的,七龙珠召唤神龙作为游戏最为迷人的彩蛋之一,召唤神龙拿钻石作为众多玩家的首选目标,但神龙的收藏品你知道多少呢,下面不妨详细了解一下吧。神龙收藏品一览:无限…

leetcode数组汇总_LeetCode刷题:前言

LeetCode刷题:前言前言作为一个对编程超级不通的小白,在2020年11月开始打算正式的刷LeetCode。(PS:前面有刷过,但是都是随机,看心情乱刷的,刷完后也没有什么感觉,该不会的还是不会&a…

通信基站c语言,[转]2015年数学建模C题–基于无线通信基站的室内三维定位问题...

之前做的一题跟大家分享一下,实际该题数据出的有点问题(个人看法不喜勿喷)。这题主要是做基站定位的,方法主要是用的基于几何的方法。该题总共四题,由于只有测试case可以验证性能,非测试case的结果我就不放了在本题中,…

php redis 投票_高可用Redis服务架构分析与搭建

HorstXuhttps://www.cnblogs.com/xuning/p/8464625.html基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysq…

android studio 启动画面,Android Studio 利用Splash制作APP启动界面的方法

public class SplashActivity extends Activity {// private final int SPLASH_DISPLAY_LENGHT 2000; // 两秒后进入系统Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().addFlags(WindowManager.LayoutParams.…

android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试

主要内容稳定性测试是什么Monkey 介绍自动化 Monkey稳定性测试是什么通过随机点击屏幕一段时间,看看 app 会不会奔溃,能不能维持正常运行。Monkey 介绍Monkey 是一个命令行工具,它可以运行在我们的模拟器或者设备当中。它可以发送一些伪随机(…

gazebo 直接获取传感器数据_5个使传感器更简单的技巧

传感器遍布地球表面和周围空间,为世界提供数据。这些廉价的传感器是物联网背后的驱动力之一,也是我们社会现在面临的数字革命。然而,连接到传感器并从传感器获取数据并不总是直截了当或容易的。这里有五个提示,可以帮助工程师第一…

鸿蒙os吃内存吗,终于上手机!华为鸿蒙 OS 2.0 系统:128KB 内存就能跑

终于上手机!华为鸿蒙 OS 2.0 系统:128KB 内存就能跑2020-09-11 10:51:480点赞0收藏0评论9月11日消息,华为昨天下午在东莞松山湖举办了全球开发者大会,本次大会带来了全新的 EMUI 11 系统和备受期待的鸿蒙 OS 2.0 操作系统&#xf…

华为鸿蒙无人驾驶,特斯拉最大的对手竟是华为?Hicar+鸿蒙OS无人驾驶技术不再一家独大!...

原标题:特斯拉最大的对手竟是华为?Hicar鸿蒙OS无人驾驶技术不再一家独大!短短几个月的时间,特斯拉的市值翻了近4倍,对于一个超级企业来说一切都显得那么不可思议,如果把它单纯的看成一家车企,恐…

鸿蒙系统会不会影响游戏,令人担心,鸿蒙系统会不会让人失望?未来难说

如今,一直被炒的沸沸扬扬的鸿蒙系统,终于在2019年8月9日发布了,次日,也就是8月10日,荣耀的智慧屏又带着鸿蒙系统出现了一次,荣耀智慧屏也成为了首次搭载鸿蒙系统的终端,见证了中国操作系统的历史…

buck电路上下管_推荐 | 学好电路设计与仿真?你不能错过这两本书籍 ~

网 友小编,有没有 Saber 相关书籍可以推荐一下?还有,Saber 软件下载那个版本比较好?当然有啦!小 编《Saber 电路仿真及开关电源设计》柯福波 等编著本书以 Saber 开关电源为基础,以具体工程电路为范例&am…

怎么批量修改html文件后缀,如何批量修改文件后缀名

我们都知道电脑文件都有一个格式,比如JPG、MP3等等格式,每个格式都代表不一样文件类型,那么我们该如何批量更改文件类型的后缀呢?比如把JPG更改为MP3,只要在电脑里设置不隐藏文件扩展名,然后建立统一的文件夹&#xf…

python 怎么调用 矩阵 第几行_第58集 python机器学习:混淆矩阵精度指标

混淆矩阵的精度计算公式为:精度(TPTN)/(TPTNFPFN),也就是说,精度就是指正确的预测数目除以所有样本的数量。准确率、召回率与f-分数:总结混淆矩阵还有几种方法,其中最常见的就是准确率和召回率。准确率度量的是被预测为…

android seekbar闪退,android seekbar 踩坑之路

最近项目中有用到seekbar,之前对这东西不太了解,趁机来踩坑。seekbar样式按我觉得Material 中的还不算难看了。但是美工给了自己的样式,还是得改。主要有这2个属性:android:thumb"drawable/thumb"android:progressDrawable"dr…

华为鸿蒙系统还没发布吗,华为没有孤军奋战,合作伙伴“雪中送炭”,鸿蒙系统正式发布!...

6月2日晚上,期待许久的鸿蒙0S 2终于正式登场了,这意味着鸿蒙手机已经变成了面向市场的正式产品,这是华为迈出的一小步,却是国产系统与安卓、iOS竞争的开始。在鸿蒙OS正式推出后,不少华为手机用户已经收到了系统更新的推…