今年の頭からLinuxのAPI、システムコール、libcなんかについてちゃんと勉強をしようという気持ちになったので、それ関連の本を読んでた。
前回読んだ「[試して理解] Linuxのしくみ」という本も良い本で、LinuxというOSがどういう仕組で動いているのかという触りを理解するためにかなり役立った。そこから一歩踏み込んで、ちゃんとLinuxのシステムコールやlibcのAPIを使えるようになりたいと思ったので、次の本を読んだ。
ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道
- 作者: 青木峰郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/09/22
- メディア: 単行本
- この商品を含むブログを見る
実は、第1版が家にあったんだけど(たぶん、奥さんが買った)、利用しているOSにFedora Coreとあったので、内容が古いなと感じたため第2版を購入した。久しぶりにこういう本を読みながら写経をしていたのだけど、やっぱり紙の本が良いなと思ってしまった。
初めてやってみるのにはちょうどいい構成の本だった
あんまりLinuxの基本的な仕組みについては詳しくない自分でも読み進めることができる内容だった。本の構成としてはシステムコールやAPIの解説の後に head
や cat
と言ったコマンドを模したプログラムを作る例題がある。そのあとで、少しレベルの上がった練習問題が掲載されている。練習問題の解答はサポートサイトにある。
練習問題の内容は本の内容から見るとちょっと難しいので、自分の理解度に応じて挑戦をしてみるのが良いと思った。実際、自分もちょっと後回しにして本を読むことを優先していった。ただ、最初の方で man
コマンドの利用方法や読み方の解説があるので自分で関連するAPIを調べながら進めることができた。
練習問題の内容は多少レベルが高いかもしれないけれど、例題や解説の書き方は非常に親切で分かりやすかった。manページは情報が全て書かれているけど、その分、文章が分かりにくくかったりするので、本の内容を読んでからmanを見ると「あ〜なるほど〜」ってなる。
章の構成はストリームやファイルシステム、シグナルの取扱を一通り学んだあとで最終的にネットワークプログラミングへと進んでいく。ネットワークプログラミングと言っても、TCPのソケット通信を行うくらいでページとしては少ない。そして、最後に総仕上げのおさらいとして、HTTPサーバーの構築を行う。この組み合わせが面白かった。
HTTPサーバーは、ファイルシステム上のファイルの読み込みに加えて、シグナルの取扱やマルチプロセス、ソケット通信を行う必要があることから本の内容のおさらいとしてはぴったりの内容だと感じた。
また、この本を読む前に[試して理解]Linuxのしくみを読んでおくと、登場するAPIやシステムコールが何を行っているものなのかという事前知識を持って挑むことができるので、ちょうど良かった。
[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識
- 作者: 武内覚
- 出版社/メーカー: 技術評論社
- 発売日: 2018/02/23
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
この本を読んだあと
「詳解Unixプログラミング」のような分厚い本に手を出しても良いかもしれないと考えている。その一方で、ここまでで蓄えた知識を使って、なんかのアプリケーションを作ってもいいなーっとも思っている。戯れに、二酸化炭素濃度センサーを購入してみた。
せっかく raspberry pi もあるので、 Linux の仕組みの上でこういったセンサー類を利用しやすくする何かを作っても良いかもしれない。