「ふつうのLinuxプログラミング」を読みました

こんにちは。salachikeです。 今年はCSの勉強を頑張っていくことを決意してから早3ヶ月...

Linuxの仕組み」を読んだあたりからシステムコールに興味が湧き、glibcを使ってシステムコールを呼ぶようなコードを書いてOS内での挙動を理解したいと思い、ふつうのLinuxプログラミングを読むことにしました。

Twitterで「途中挫折しないか心配」ということを呟いたら、 大学の友人たちが声をかけてくれたことから、「週ごとに取り組む範囲を各自で進め、わからなかったところをDiscordで議論する」というスタイルで 読み進めていき、ちょうど2ヶ月ほどで全ての章を読み切ることができました。

この本の集大成としては、デーモンで動くHTTPサーバーを作ります。画像は動いたときの様子です!

f:id:tarovel4842:20210602173040p:plain
デーモンってfork後の子プロセスが新しいセッションリーダーになるから、端末に紐づかないプロセスになるとのこと。

この本で一番良いと思うところは練習問題の存在だと思います。 各種APIの紹介を眺め、その使用例を動かすだけでは「ちゃんと動いてすごいー」ぐらいの感想で終わってしまいますが、練習問題に取り組むことで自分の頭でしっかり考え。本文中の理解のあやふやだった点に気づいたということが多々ありました。

練習問題の例としては、

  • fgets, fgetcなどの入出力系のAPIを説明する章では、tailコマンドの実装
  • fork, exec, wait, dupなどプロセス系のAPIを説明する章では、リダイレクトやパイプが使えるshellの実装

など普通に骨のある問題が多かったですが、その分できたときの喜びは大きかったです! 自分にはただ解説があるだけの本よりも、コードを書き自分の理解と照らし合わせるような方法が合っていると思うので、 今後も手を動かす学習を継続してやっていきたいと思います。