标签:
通常,stderr和stdout被用来输出内容显示到屏幕,但是,有时候我们需要把这些信息写到指定的文件,方便随时查阅。最简单的实现方式就是,把 stderr/stdout 的输出重定向到文件。#include <stdio.h> #include <stdlib.h> 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; }执行结果如下,
类型 | 说明 | 输出情况 |
满缓冲 | I/O操作只有在缓冲区被填满之后才会进行 | 1.缓冲区满 2.刷出数据 (fflush) 3.关闭文件 (fclose) |
行缓冲 | 通常只有遇到换行符时,才会执行实际的I/O操作;但缓冲区满也会强制执行 | 1.遇到换行符 2.缓冲区满 3.刷出数据 (fflush) 4.关闭文件 (fclose) |
无缓冲 | 不缓存,直接进行I/O操作 | 直接输出 |
#include <stdio.h> #include <stdlib.h> 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; }运行结果如下:
int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );setbuf() 可以当作是调用setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZE);
_IOFBF | 满缓冲 |
_IOLBF | 行缓冲 |
_IONBF | 无缓冲 |
/* setvbuf example */ #include <stdio.h> int main () { FILE *pFile=fopen ("myfile.txt","w"); setvbuf ( pFile , NULL , _IOFBF , 1024 ); // File operations here fclose (pFile); return 0; }
标签:
原文地址:http://blog.csdn.net/mycwq/article/details/46554805