- コマンドラインで > を使うと、標準出力をファイルにリダイレクトできる
- 2> を使うと、標準エラーをリダイレクトできる
- printf()は、fprintf(stdout)のショートカットである
- fprintf(stderr)で標準エラーを出力できる
- 通常、1つのプロセスが持てるデータストリームの数は256個まで
- コマンドライン引数は、文字列ポインタの配列としてmain()に渡される
/** * ピザの注文を処理するプログラム */ #include <stdio.h> #include <unistd.h> // POSIXライブラリ(getopt()を使うために読み込み) int main(int argc, char *argv[]) // argcには引数の個数、argvには引数が入っている { char *delivery = ""; int thick = 0; int count = 0; char ch; // getopt()の第3引数で、オプションの名前を指定する。 // getopt()の第3引数で、オプション名の後ろに:をつけると、オプション名の後ろに引数が続くことを示す while ((ch = getopt(argc, argv, "d:t")) != EOF) { // dオプション(引数有り)とtオプション(引数無し)が有効 switch (ch) { case 'd': delivery = optarg; // optargはオプションの引数 break; case 't': thick = 1; break; default: fprintf(stderr, "Unknown option: '%s'\n", optarg); return 1; } // optindにはコマンドラインから読み込んだ文字列数が格納される argc -= optind; argv += optind; if (thick) puts("Thick crust."); if (delivery[0]) printf("To be delivered %s.\n", delivery); puts("Ingredients:"); for (count = 0; count < argc; count++) puts(argv[count]); } return 0; }
感想
標準入力・標準出力・標準エラーや、リダイレクト、パイプ、小さなツールの組み合わせ等、CプログラムというよりはUnix(の、主にコマンドライン)入門という趣の章だった。
そもそもCはUnixのために作られた言語なので、内容的には妥当だと思う。ただ、Windows環境の人は違和感を感じる章かも。
また、本章で題材とした「CSVからJSONへの変換」のような仕事を行う「小さなツール」は、Cよりも、スクリプト言語で書いたほうが簡単。例えばRubyなら、CSVからJSONへの変換は、以下の3行で書ける(CSVデータの取り扱いは面倒なので、自前で実装するのではなく、言語やライブラリの力を借りるべき)。
require 'csv' require 'json' CSV.parse(data).to_json出典:http://stackoverflow.com/questions/5357711/csv-to-json-ruby-script