練習問題9.3

1. コマンドラインで指定されたファイル(テキストまたはバイナリ)のバイト数を数え、その結果を表示するプログラムを作成してください。

#include
#include

int main(int argc, char *argv[])
{
    FILE *fp;
    long count = 0;
    char ch;

    if (argc != 2) {
        printf("Usage: %s \n", argv[0]);
        exit(1);
    }

    if ((fp = fopen(argv[1], "rb")) == NULL) {
        printf("Channot open file: %s\n", argv[1]);
        exit(1);
    }

    while (!feof(fp)) {
        ch = fgetc(fp);
        if (ferror(fp)) {
            printf("Error: at reading file.\n");
            exit(1);
        }
        count++;
    }

    if (fclose(fp) == EOF) {
        printf("Error: at closing file.\n");
        exit(1);
    }

    printf("%ld bytes\n", count - 1);

    return 0;
}

出力部分で – 1 しているのは、EOF も数えてしまっているから、それを差し引いている。

実行例:

takatoh@nightschool $ ./practice_9_3_1 sample_9_3
8925 bytes
takatoh@nightschool $ ls -l sample_9_3
-rwxrwxr-x 1 takatoh takatoh 8925  5月 10 19:11 sample_9_3

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください