2008年7月20日
LINUXシステムプログラミング
発売後すぐに入手したものの長らく積読状態が続いていた『LINUXシステムプログラミング』をようやく読みました。
本書はその名の通り、Linux のシステムプログラミングについての解説書です。システムプログラミングの定義は明確ではありませんが、システムコールを用いて OS に近いレイヤーで行うプログラミングのことと考えて差し支えないと思います。
UNIX一般のシステムプログラミングについては『詳解UNIXプログラミング』という決定版がありますが、本書は Linux 固有の話題や POSIX の比較的新しい API が載っているところが異なります。
たとえば、前者になく本書にだけ載っている話題としては以下のようなものがあります。知らなかった話も多くて勉強になりました。
- posix_fadvise で I/Oのアクセスパターンのヒントを与える
- epoll でI/Oイベントを効率的に監視する
- Linux のI/Oスケジューラのアルゴリズム
- sched_setaffinity でプロセスを特定のCPUにバインドする
- sched_getschduler でスケジュールポリシーを変更する
- getxattr, setxattr でファイルの拡張属性を操作する
- inotify でファイルイベントを監視する
- /dev/full に書き込んで ENOSPC をテストする
- posix_memalign でアライメントを指定してメモリを確保する
- mlock, mlockall でアドレス空間の一部または全体を物理メモリにロックする
- mincore でメモリ領域が物理メモリにあるか調べる
- glibc の malloc に特有の関数 mallopt, mallinfo, etc.
- sigqueue でシグナルを送りつつデータも送る
- 素晴らしきかな sig_code の世界
- POSIX のクロックインタフェース (clock_*)
- POSIX のタイマーインタフェース (timer_*)
- GCC の拡張機能
前述の『詳解UNIXプログラミング』が個々の話題を徹底的に掘り下げているのと比べると、本書の解説は比較的、簡素な部類に入ります。それから、本書は扱う話題をプロセス、ファイル、シグナル、時間といった基本的な概念に絞っているのも特徴です。
プロセス間通信、スレッド、ネットワークプログラミングといった高度な話題は本書の対象外です。同様に、端末やモデムといった、今となっては重要性が薄れた話題も省かれています。
まとめ
Linux のシステムプログラミングの基本、および、新しいシステムコールを活用した一歩進んだテクニックが学べる良書です。初心者もベテランもどちらも楽しめる内容だと思います。全体で380ページ程度と比較的コンパクトなので、気負わずに読めるところもポイントです。唯一気になったのは図が少ない点です。
ところで、日本語訳である本書にはたびたび訳注が登場します。原書には登場しない openat システムコールを紹介するなど、ためになる注が入っています(蛇足っぽいものもありますが)。
オライリージャパン
売り上げランキング: 9166