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