Open10

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

Liquid_systemLiquid_system

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

Liquid_systemLiquid_system

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

Liquid_systemLiquid_system

10.6のunlinkまで終えたのでメモ

Linuxの構造は

  • ファイル
  • プロセス
  • ストリーム

の三つだけで大体説明できる。つまり、

  • データに名前を付けて保存する場所としてのファイルシステム
  • 活動する主体としてのプロセス
  • プロセスがファイルシステムなどのデータのやり取りをする手段としてのストリームがある

とのこと

Liquid_systemLiquid_system

写経する際には以下の点に注意した

  • 繰り返し処理で使うi変数をなるべくfor文内で処理をした
  • 可読性向上のために
exit(1);

exit(EXIT_FAILURE);

とした

Liquid_systemLiquid_system

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

Liquid_systemLiquid_system

プロセスにいつタイムスライスを与えるかを管理するカーネルの機構がスケジューラ(scheduler)です。ディスパッチャ(dispatcher)と言うこともあります

CPUは実行するプログラムを切り替える。タイムスライスは各プロセスの為に配分される時間のことを指す

Liquid_systemLiquid_system

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

へー

Liquid_systemLiquid_system

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

へー(2回目)

Liquid_systemLiquid_system

fork()プロセスの章やってる

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

Liquid_systemLiquid_system

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