Open10
「ふつうのLinuxプログラミング」やる

絶版になったけれども内容が良かったためにプレミア価格で取引されている。今回は図書館で入手した。

本の内容としてはC言語でシステムコールの学習をしつつ、基本的なコマンド(例えばcatとか)を実装していく流れになっている。
最終的にはHTTPサーバーまで作れるらしい

10.6のunlinkまで終えたのでメモ
Linuxの構造は
- ファイル
- プロセス
- ストリーム
の三つだけで大体説明できる。つまり、
- データに名前を付けて保存する場所としてのファイルシステム
- 活動する主体としてのプロセス
- プロセスがファイルシステムなどのデータのやり取りをする手段としてのストリームがある
とのこと

写経する際には以下の点に注意した
- 繰り返し処理で使うi変数をなるべくfor文内で処理をした
- 可読性向上のために
exit(1);
を
exit(EXIT_FAILURE);
とした

システムコールは大体if文内に置き、引数チェックをすると同時に処理しているな

プロセスにいつタイムスライスを与えるかを管理するカーネルの機構がスケジューラ(scheduler)です。ディスパッチャ(dispatcher)と言うこともあります
CPUは実行するプログラムを切り替える。タイムスライスは各プロセスの為に配分される時間のことを指す

AMD64アーキテクチャのCPUは64ビットの整数レジスタ16本を持ち、(中略)x86の32ビットアーキテクチャであるIA-32と互換性があり、現存のプログラムをそのまま動作できる点も特徴です。
へー

AMD64上のLinuxでは、ポインタとlongが64ビットでintが32ビットの、LP64(LP64 model)が採用されています。これに対して、IA-32上のLinuxではint,long,ポインタすべてが32ビットでした。
へー(2回目)

fork()プロセスの章やってる
fork()で自プロセスの複製 -> exec()で自プロセスのプログラムを上書き(子) -> wait()で子プロセスが終了するのを待つ

wait()関数の引数用に終了の仕方を調べるマクロがある。
WIFEXITED(status)はW(wait)IF(if文)EXITEDってことか