20131027【C言語】完全なエラーチェックをしながらファイルをコピーする

お題

完全なエラーチェックをしながらファイルをコピーする

 

プログラム概要

コマンドライン引数でインプットファイルとアウトプットファイルを指定し、

インプットファイルからアウトプットファイルにコピーする。

その際、完全なエラーチェックを行う

 

ソース

#include <stdio.h>

#include <stdlib.h>

 

int main(int argc, char *argv[])

{

FILE *fp1, *fp2;

char ch;

 

/* Check arguments */

if (argc != 3) {

fprintf(stderr, "Usage: <Program Name> <Source File> <Target File>.\n");

exit(1);

}

 

/* Open source file */

if *1 == NULL) {

fprintf(stderr, "Error opening Source File.\n");

exit(1);

}

 

/* Open Traget File */

if *2 == NULL) {

fprintf(stderr, "Error opening Traget File.\n");

exit(1);

}

 

/* Copy file */

while(!feof(fp1)) {

ch = getc(fp1);

if (ferror(fp1)) {

fprintf(stderr, "Error reading Source File.\n");

exit(1);

}

 

if(feof(fp1))

break;

 

putc(ch, fp2);

if (ferror(fp2)) {

fprintf(stderr, "Error writing to Target File.\n");

exit(1);

}

}

 

/* Close Source File */

if (fclose(fp1) == EOF) {

fprintf(stderr, "Error while closing Source File.\n");

exit(1);

}

 

/* Close Target File */

if (fclose(fp2) == EOF) {

fprintf(stderr, "Error while closing Target File.\n");

exit(1);

}

 

return 0;

}

 

実行結果

# cat input.txt 

1234567890

abcdefghij

# ./a.out input.txt output.txt 

# cat output.txt 

1234567890

abcdefghij

 

*1:fp1 = fopen(argv[1], "r"

*2:fp2 = fopen(argv[2], "w"