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

来源:互联网 发布:杨氏弹性模量实验数据 编辑:程序博客网 时间:2024/06/05 06:11
 
#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);elsewhile(--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);}}