错误处理,错误输出

错误的处理/输出

原因:因为运行程序一般在运行的末尾才输出形象的出错信息,这种情况在程序输出到屏幕时,还可以接受,但当是输出到文件或者通过管道作为另外一个程序的输入时,则不可以接受,因为出错信息也会作为输出。

解决办法:标准输出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);
}



你可能感兴趣的:(错误处理,标准错误输出)