「ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道」を読んでみた

目次はこちら

第1部 Linuxの仕組み
第1章 Linuxプログラミングを始めよう
第2章 Linuxカーネルの世界
第3章 Linuxを描き出す3つの概念
第4章 Linuxとユーザ

第2部 Linuxプログラミングの根幹
第5章 ストリームにかかわるシステムコール
第6章 ストリームにかかわるライブラリ関数
第7章 headコマンドを作る
第8章 grepコマンドを作る
第9章 Linuxのディレクトリ構造
第10章 ファイルシステムにかかわるAPI
第11章 プロセスとハードウェア
第12章 プロセスにかかわるAPI
第13章 シグナルにかかわるAPI
第14章 プロセスの環境

第3部 Linuxネットワークプログラミング

第15章 ネットワークプログラミングの基礎
第16章 HTTPサーバを作る
第17章 HTTPサーバを実用化する

第18章 本書を読み終えたあとは

ところどころ飛ばし読みなんだけどざざっと読んでみた割と良い本なんじゃないかと思ったのでちょっと書いてみる。

本書はC言語を使ったLinuxシステムプログラミングの本です。

2005年に出版された本で「18.8 バージョン管理システム」のくだりで本書の原稿はCVSで管理したけど最近はSubversionも普及しているし長期的にはSubversionが優勢になるかもねみたいな記述があってちょっとタイムスリップした気分になった。まあでもここは別に本書のおまけ部分だしそれ以外はそんなに古びてないんじゃないかな。

ところで僕自身がC言語を使ったLinuxシステムプログラミングの経験があるかというと過去も現在も無いし、将来も無いんじゃないかという気がしている。

でも、Joel Spolskyが「 漏れのある抽象化の法則」と呼んだように、抽象化に漏れがあることはあるし、fluentdのようにRubyで書かれているけど実態はLinuxシステムプログラミング全開なプロダクトもあるのでまあ読んで損はあるまいと思った次第です。Redis使う場合とかももしかしたら参考になるかもしれないしね。

内容はというと第1部でざざっとLinuxの仕組みを説明して第2部でLinuxシステムプログラミングの解説に入ります。

open, read, write, closeといったシステムコールを使ってcatコマンドを実装したり、getcやputcharを使ってheadコマンドを実装したりしながら解説しています。途中でgdbやstraceの使い方の説明も軽く出てきます。ファイル、プロセス、シグナルといったLinuxシステムプログラミングの話なら出るであろう話は一通り出てきます。ただしスレッドとかselect/pollの話とかはないです。第3部はネットワークプログラミングの話。ソケットを使ってHTTPサーバを作っています。

本書は約460ページあるのでさすがに薄いとは言えないけど、詳解UNIXプログラミングで挫折した僕のような人には良いんじゃないでしょうか。

ただしC言語なんで低水準というか抽象度が低いので慣れてないとコード読むのがちょっとつらいかも。その意味ではプロセスの話しか書いてないけど高水準というか抽象度が高いRubyでサンプルコードが書かれた下記なんかは良い本だと思います。約150ページと薄いし。

なるほどUnixプロセス ― Rubyで学ぶUnixの基礎
Jesse Storimer, 島田浩二(翻訳), 角谷信太郎(翻訳)
達人出版会
発行日: 2013-04-25
対応フォーマット: EPUB, PDF, ZIP

詳解UNIXプログラミングはこの分野の本としてはおそらく一番有名で、ただし約700ページと分厚いし原書の初版が1993年なのでちょっと古すぎるかなという気がします。

詳解UNIXプログラミング

詳解UNIXプログラミング

  • 作者: W.リチャードスティーヴンス,W.Richard Stevens,大木敦雄
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/12
  • メディア: 単行本
  • 購入: 8人 クリック: 103回
  • この商品を含むブログ (40件) を見る

ちなみに原書の方は『詳細UNIXプログラミング』の原書『Advanced Programming in the UNIX Environment』(通称APUE)の3rd Editionが出てました - (ひ)メモにあるように第3版まで出ています。こちらもPDFをゲットしておきました。こちらは第1版と違ってスレッドの話がありますね。