「ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道」を読んでみた
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
- 作者: 青木峰郎
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/07/27
- メディア: 単行本
- 購入: 35人 クリック: 450回
- この商品を含むブログ (150件) を見る
目次はこちら
第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プログラミングはこの分野の本としてはおそらく一番有名で、ただし約700ページと分厚いし原書の初版が1993年なのでちょっと古すぎるかなという気がします。
- 作者: W.リチャードスティーヴンス,W.Richard Stevens,大木敦雄
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/12
- メディア: 単行本
- 購入: 8人 クリック: 103回
- この商品を含むブログ (40件) を見る
ちなみに原書の方は『詳細UNIXプログラミング』の原書『Advanced Programming in the UNIX Environment』(通称APUE)の3rd Editionが出てました - (ひ)メモにあるように第3版まで出ています。こちらもPDFをゲットしておきました。こちらは第1版と違ってスレッドの話がありますね。