#include#include void _filecopy(FILE *fp_in, FILE * fp_out); int main(int argc , char * argv[]) { FILE * fp; char *prog = argv[0] ; //指定的錯誤輸出文件名; if( argc == 1 ) //沒有指定打開文件,把標准輸入復制到標准輸出 _filecopy(stdin,stdout); else while(--argc > 0) if((fp = fopen(*++argv,"r")) == NULL) {//文件打開失敗 fprintf(stderr,"%s:打開%s失敗",prog,*argv ); exit(1); }else{ _filecopy(fp ,stdout); fclose(fp); } if(ferror(stdout)){ //如果輸出流出錯ferror函數返回一個非零的值 fprintf(stderr, "%s:輸出流出錯了!\n",prog); exit(2); } exit(0); return 0; } void _filecopy(FILE *fp_in, FILE * fp_out) { int c; while ((c = getc(fp_in)) != EOF) putc(c,fp_out); }