2006年8月 2日

詳解UNIXプログラミング

いつか全部読もうと思いつつ、長らくつまみ読みしかしていなかった『詳解UNIXプログラミング』を、ようやく思い立って最初から最後まで読みました。

 

この本のすごいところは、ほとんどすべてのページに、Unix のシステムプログラミングを行う上で重要なことが書かれていることです。本書を通読しながら、「こんなこともできたのか」「こんな落とし穴があったのか」「こういう仕組みだったのか」といった発見が数え切れないほどありました。

買った当初は、とりあえず持っておいて必要なときにリファレンス的に使えばいいや、と考えていたのですが、リファレンスというものは「何ができるか」をある程度知っていないと有効に活用できません。そういった意味でも通読して、Unix のシステムコールでどんなことができるのかを一通り知ったのは大きな収穫でした。

本書では全編を通じて、システムプログラミングにありがちな落とし穴について注意事項が入念に述べられています。一見単純そうなシステムコールでも、戻り値、errno、シグナルと3つの要素が絡まると途端に難しくなります。こうした落とし穴を知ることは、知らず知らずのうちに埋め込んでしまいがちなバグを防ぐ上で役に立ちます。

一方で、何ができるか、どうやるか、というハウツーだけではなく、システムプログラミングの基本的な概念や、ある機能がOS内部でどのように実装されているかといった事柄についても解説が充実しています。レースコンディションについて具体例を示して解説したり、 forkした親子のプロセスがどのようにファイルを共有しているかを図を用いて解説している部分など、本書の解説の丁寧さには感銘を受けました。

後半の、データベースライブラリ、PostScript プリンタとの通信、モデムの発信、の3つの章は実用性という意味では今ではそれほど役に立ちませんが、まとまった量のコードが解説つきで掲載されているため、システムプログラミングの実際例として参考になります。

コードはオブジェクト指向が普及する以前の古いスタイルの C で書かれているため、大きめのプログラムの設計としてはあまり真似しない方がいいかもしれませんが、Unix のシステムコールを使い方という点では本書のコードは非常に参考になります。

というわけで、個人的には熟読して正解の本でした。よくいわれるように、確かに Unix のシステムプログラミングを行う上で必携の一冊です。歴史的経緯についても随所で触れられているのが本書の特徴です。システムコールを直接叩く機会がなくても、それがどういう仕組みで動いているかを知ることはグレートコードを書く上で役に立つのではないかと思います。

ところで、今回詳解した詳解UNIXプログラミングはシステムコールにフォーカスした低レイヤの内容となっていますが、もう少し高レイヤの Unix プログラミングのエッセンスについては、UNIXプログラミング環境が最高の一冊です。絶版になってしまっているのが非常に残念です。

詳解UNIXプログラミング
W.リチャード スティーヴンス W.Richard Stevens 大木 敦雄
ピアソンエデュケーション (2000/12)
売り上げランキング: 99,727