C例程:文件读写 拷贝 标准输入输出等

 
#include <stdio.h>


/*cat : concatenate files, version 1*/
main(int argc, char *argv[]){
	FILE *fp;
	void filecopy(FILE *, FILE *);

	if(argc == 1)/*no args; copy standard input*/
		filecopy(stdin, stdout);
	else
		while(--argc > 0)
			if((fp = fopen(*++argv, "r")) == NULL){
				printf("cat : can't open %s\n", * argv);
				return 1;
			}
			else{
				filecopy(fp, stdout);
				fclose(fp);
			}
	return 0;

}

/* filecopy : copy file ifp to file ofp*/
void filecopy(FILE *ifp, FILE *ofp){
	int c;

	while((c = getc(ifp)) != EOF){
		putc(c, ofp);
	}
}


其中,main函数中的第二行代码void filecopy(FILE *, FILE *);是对filecopy函数的声明。也可以放在main函数的前面。但其作用域有所不同。在main函数外面声明的函数全局可用,在main函数里面声明的函数只在main函数内部可用。

下面对以上程序进行了一些改进,加入了对出错情况的处理。

#include <stdio.h>

/*cat : concatenate files, version 2*/
main(int argc, char *argv[]){
	
	void filecopy(FILE *, FILE *);
	FILE *fp;
	char *prog = argv[0];/*program name for errors*/
	
	if(argc == 1)/*no args; copy standard input*/
		filecopy(stdin, stdout);
	else{
		while(--argc > 0)
			if((fp = fopen(*++argv, "r")) == NULL){
				fprintf(stderr, "%s : can't open %s\n", prog, * argv);
				exit( 1 );
			}
			else{
				filecopy(fp, stdout);
				fclose(fp);
			}
	}
	
	if(ferror(stdout)){
		fprintf(stderr, "%s: error writing stdout\n", prog);		
		exit(2);
	}
}

/* filecopy : copy file ifp to file ofp*/
void filecopy(FILE *ifp, FILE *ofp){
	int c;
	
	while((c = getc(ifp)) != EOF){
		putc(c, ofp);
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值