错误的处理/输出
原因:因为运行程序一般在运行的末尾才输出形象的出错信息,这种情况在程序输出到屏幕时,还可以接受,但当是输出到文件或者通过管道作为另外一个程序的输入时,则不可以接受,因为出错信息也会作为输出。
解决办法:标准输出stdout,它是一个指向标准输出文件的文件指针,采用同样的方法,stderr作为标准错误文件指针,指向标准错误文件,这样错误信息便不会被stdout包含。
int ferror(FILE *fp) 检查fp指针是否出错,返回值为0,未出错;返回值非0,出错。
用例子说明:
/*
*******************************
*cat.c
*用cat程序演示错误的处理
*错误信息输出到stderr标准错误文件
*错误出现时,exit()函数终止进程,返回值
*******************************
*/
#include<stdio.h>
#include<stdlib.h> /*标准库头文件,包含了C语言的最常用的系统函数,exit()函数为系统函数,在此头文件定义*/
int main(int argc,char *argv[])
{
void fileCopy(FILE *,FILE *);
FILE *fp=NULL;
char *prog=argv[0];/*将程序名提取出*/
if(argc==1){
fileCopy(stdin,stdout);
//exist(0); /*exit(0)与return 0的功能一样,正常返回,一般写在程序末尾*/
}
else{
while(--argc>0){
if((fp=fopen(*++argv,"r") )==NULL){
fprintf(stderr,"%s can't open %s",prog,*argv);/*出错信息输出到stderr文件*/
exit(1);/*只有出错的时候才调用exit函数*/
}
else{
fileCopy(fp,stdout);
fclose(fp);
}
}
}
if(ferror(stdout)){/*判断在文件指针内部是否出错*/
fprintf(stderr,"%s error writting in stdout \n",prog);
exit(2);
}
exit(0); /*与return 0的功能一样*/
}
void fileCopy(FILE *inFile,FILE *outFile)
{
int c;
while((c=getc(inFile)) != EOF)
putc(c,outFile);
}