『Head First C』第3章 小さなツールの作成

  • コマンドラインで > を使うと、標準出力をファイルにリダイレクトできる
  • 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

コメントを残す

コメントを残す