原文地址:
我们在写C程序时经常遇到printf(),fprintf(),perror(),其实和上述三个函数对应的就是stdin,stdout,stderr。
说到这不得不提及stdin,stdout,stderr。想想,我们在用C去写文件时的操作,File *fp=fopen(),这个fp就是我们向系统申请的,相当于一通往文件的通道。其实,stdin,stdout,stderr就是这个fp,不过他是随着计算机系统的开启默认打开的。
0就是stdin,表示输入流,指从键盘输入
1代表stdout,2代表stderr,1,2默认是显示器。
printf()其实就是向stdout中输出,等同于fprintf(stdout,"Hello World!!\n")
perror()其实就是向stderr中输出,perror(" Hello World!!\n"),相当于fprintf(stderr,"Hello World!!\n")
-
#include <stdio.h>
-
int fprintf( FILE *stream, const char *format, ... ); //stream可以是stdout、stderr、或者自定义的stream
另外,常用用法:
-
perror("fopen()");
-
fprintf(stderr, "fopen():%s\n", strerror(errno));//二者的输出结果是一样的,但是strerror()有一个问题,就是strerror()返回的字符串存储在一个公共的区域,也就是,说如果其他线程也调用了这个函数,而且传入了一个不同的errno值,那么这个字符串会被覆盖掉。
-
//fprintf(stderr, "fopen() failed . errno = %d : %s\n", errno, strerror(errno));
阅读(4999) | 评论(0) | 转发(0) |