ブログ記事
catやgrepを自作してOSを理解する:『ふつうのLinuxプログラミング』
OSの内部は複雑に見えるが、いくつかの軸で捉え直すと一気に見通しがよくなる。青木峰郎『ふつうのLinuxプログラミング』は、標準ライブラリの裏にあるシステムコールを直接たたきながら、Linuxの動作原理を手を動かして理解していく一冊だ。
1. catやgrepをC言語で再実装する
本書の面白さは、日々ターミナルで使っているコマンドを、自分の手でC言語から作り直していく点にある。
最も基本的なcatのクローンから始め、headやgrepへと順番に機能を広げていく。高水準のライブラリに頼るのではなく、ファイルを開き、バッファに読み込み、出力へ書き出すという動作をシステムコールのレベルで記述する。コンピュータがどうデータを動かしているかが具体的に見えてくる。引数処理やエラー処理、manで仕様を確認する一連の流れは、どの言語でも通用する自走力につながる。
2. 「ストリーム・ファイルシステム・プロセス」の3概念で繋ぐ
本書は、Linuxの内部を「ストリーム」「ファイルシステム」「プロセス」という3つの概念に絞り、全編を通してこの軸をぶらさずに解説する。
座学から実践のコーディングまで、この3つの関係を繰り返し意識させることで、バラバラだったAPIの知識が立体的に結びつく。とりわけ、通常のファイル入出力もネットワークのソケット通信も、同じ「ファイルディスクリプタ」を介した一貫したデータ処理として扱える点を、コードで確かめられる。UNIXの設計思想の一貫性が体感できる。
3. HTTPサーバーを自作してネットワークの原点に触れる
多くのシステムプログラミング本がプロセス制御やファイルAPIで終わるなか、本書は第3部でソケットAPIを使ったHTTP/1.1サーバーの実装まで進む。
ネットワーク越しの通信の実態は、結局「あるホストのプロセス」と「別のホストのプロセス」がストリームでデータをやり取りすることだ。socket、connect、listen、acceptといったシステムコールを直接書き、接続を待ち受けて応答を返す仕組みを組み立てる。一度この経験をしておくと、普段作っているWebアプリの裏で何が起きているかを高い解像度で想像できるようになる。
DevBookPath のマップで確認する
この本の前後の読書順は、DevBookPath のグラフで確認できます。
本記事のリンクには Amazon アソシエイト等の広告が含まれる場合があります。リンク経由の購入で運営者に紹介料が支払われることがあります。
この記事を共有
この地図を共有