KDOC 684: 『ふつうのLinuxプログラミング』

この文書のステータス

  • 作成
    • 2026-10-17 貴島
  • レビュー
    • 2026-10-17 貴島

概要

『ふつうのLinuxプログラミング 第2版』は、Linuxの仕組みから学ぶシステムプログラミングの本である。

メモ

  • Linuxはファイルシステムとプロセスとストリームでできている
  • Linux上において、活動する主体はユーザではなく、プロセス
  • ログイン時にクレデンシャルが作られ、プロセスに渡している
  • シェルと端末は異なる
    • 端末はユーザとのインターフェースになる部分。現代では仮想化されていて無数にある。端末に対応するデバイスファイル /dev/tty0 などがある
    • シェルはユーザからの命令を解釈し実行するプログラムのこと。ストリームからコマンドを読み込んで実行するプログラムにすぎない
  • ttyの語源はテレタイプ。ディスプレイがなかったので長い紙に結果を出力していた
  • tabの語源はtable
  • キーボード → 端末ドライバ → ストリーム → プロセス → ストリーム → 端末ドライバ → ディスプレイ
  • Linuxの入出力の主な4つのシステムコール
    • ストリームからバイト列を読み込むread
    • ストリームにバイト列を書き込むwrite
    • ストリームを作るopen
    • 用済みのストリームを始末するclose
  • ファイルディスクリプタは整数値にすぎない
  • 固定のファイルディスクリプタ
    • 0: 標準入力
    • 1: 標準出力
    • 2: 標準エラー出力
  • 標準エラー出力がある理由。標準出力は次のプログラムの標準入力につながれている場合が多いので、ここでエラーを出しても気づかない可能性が高いから
  • ストリームはファイルディスクリプタで表現され、read()またはwrite()で操作できるもののこと
  • システムコールは遅いので、バッファに溜まってからシステムコールするとよい
  • gets()はバッファオーバーフローを起こす可能性があり、使ってはいけない。世界初のインターネットワームはバッファオーバーフローの脆弱性を利用した
  • ビルド
    • プリプロセス
      • 純粋なC言語のソースコードを出力する
    • コンパイル
      • C言語のソースコードをアセンブリ言語のソースコードに変換する
    • アセンブル
      • アセンブリ言語のソースコードを機械語を含むオブジェクトファイルに変換する
    • リンク
      • オブジェクトファイルから実行ファイルを生成する
  • /proc にはプロセスの情報がファイルに格納されている
  • ダイナミックロードは、すべてのリンク作業を実行時に行う手法
  • 0は成功、1はエラーというのはUnixに特有の決まりごと
  • プロセスの親子関係を調べる pstree
  • ログインシェルを調べる w, last
  • HTTPの仕組みとファイルシステムはよく似ている
  • HTTPで公開されるのはファイルシステムの一部だけ。これをドキュメントツリーという。ドキュメントツリーのルートディレクトリをドキュメントルートという。デフォルト設定のWebサーバでいうところの /var/www/html のことか
  • HTTPサーバのしごと: HTTPリクエストをドキュメントルート以下のファイルにマップし、レスポンスとして送り返すこと

関連

なし。