2019.9.5C++基础学习笔记——stdout与stderr

C++基础学习笔记——stdout与stderr

今天写C++数据库接口时看到了代码如下:

fprintf( stderr , "错误原因:%d\n",mysql_error( &mysql ));

由此了解一下fprintf函数中第一个参数stdout与stderr。

fprintf()函数

一般C++输出除了std::cout外,还有printf(),sprintf()和fprintf()这三种。

**printf()**就是标准输出,在屏幕上打印出一段字符串来。

**sprintf()**就是把格式化的数据写入到某个字符串中。返回值字符串的长度。

**fprintf()**是用于文件操作。
原型:int fprintf(FILE *stream,char *format,[argument]);
功能:fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件。

fprintf()函数一般用于输出到文件流操作,操作实例如下:

char buff[20] =  "test message" ;
FILE* pfile;
pfile = fopen( "test.txt" , "w" );
if(pfile != NULL)
{
	fprintf( pfile , "写入信息:%s\n",buff );
}

**fprintf()**函数的第一个参数一般用于指定将要输出到的文件流,但是这个参数可以被设置为“stdout”和“stderr”这两个关键字。

stdout / stderr关键字

stdout关键字代表标准输出,stderr代表标准错误。当fprintf()函数的参数设置为stdout或stderr时,一般都是将后面的信息输出到屏幕上,除去文件操作与printf()没太大区别。
但是,参数stdout和stderr在机制上有很大区别,stdout的标准输出对象设置为行缓冲模式,即数据写满一行或有‘\n’换行符时从缓冲区输出数据,而stderr无缓冲区,其指向的就是输出设备(屏幕),所以两条代码相比下来如果没有换行符‘\n’,stderr参数的输出指令比stdout参数的要快。
实例:

fprintf( stdout , "输出信息:stdout" );
fprintf( stderr ,  "输出信息:stderr\n" );
输出结果:
输出信息:stderr
输出信息:stdout

fprintf( stdout , "输出信息:stdout\n" ); //加了换行符,行缓冲触发,直接输出
fprintf( stderr , "输出信息:stderr\n");
输出结果:
输出信息:stdout
输出信息:stderr

stdout/stderr解说

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章