if (argc != 3) {
fprintf(stderr, "Example: qtotal motofile.dat insatsu.dat\n");
}
main関数には、コマンドラインをスペースで区切った文字列の配列が渡されますが、argcはこのコマンドも含めた文字列の個数を示します。
個数が3以外なら、エラーメッセージつまりこのコマンドの使用例を標準エラー出力に表示します。標準エラー出力とは、コマンドラインでたとえ出力リダイレクト「> 出力ファイル名」されていても、出力ファイルには方向転換されないで、画面に表示されるものです。
if ((infile = fopen(argv[1], "rt")) == NULL) {
fprintf(stderr, "Can not open file: %s\n", argv[1]);
exit(1);
}
argv[1]はこのコマンドを除く最初の文字列を示し、fopen関数はこれをファイル名として"rt"すなわち読み取り専用、テキストモードで開きます。テキストモードとは改行コードが正しく認識されるモードです。
fopen関数の結果がNULLなら、何らかの原因(ファイルが存在しない等)で開けなかったことを示します。その際、エラーメッセージつまりこのファイルが開けなかった旨を標準エラー出力に表示します。そして、exit(1)つまりこのコマンドを終了コード1で終了します。終了コードとは、このコマンドを起動した(通常は)シェル(Windowsならコマンドプロンプト)が利用するもので、0ならコマンド成功、0以外ならコマンド失敗とみなします。
fopen関数の結果がNULL以外なら、ファイルを開くことに成功したことを示します。これ以降、infileを関数の引数に指定しfscanf関数やfgets関数などを使ってファイルの読み取りができます。
if ((outfile = fopen(argv[2], "wt")) == NULL) {
fprintf(stderr, "Can not open file: %s\n", argv[2]);
exit(1);
}
argv[2]はこのコマンドを除く2番目の文字列を示し、fopen関数はこれをファイル名として"wt"すなわち書き込み専用、テキストモードで開きます。
fopen関数の結果がNULLなら、何らかの原因で開けなかったことを示すので、その際、エラーメッセージを標準エラー出力に表示します。そして、exit(1)つまりこのコマンドを終了コード1で終了します。
fopen関数の結果がNULL以外なら、ファイルを開くことに成功したことを示すので、これ以降、outfileを関数の引数に指定しfprintf関数やfputs関数などを使ってファイルの書き込みができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。