Linux プログラミングインタフェース
リナックス プログラミング インタフェース
- 著者:
- マイケル・ケリスク / 千住治郎(ケリスク, マイケル / センジュ, ジロウ)
- 出版社:
- オライリー・ジャパン
- 出版日:
- 2012年11月
- ISBN:
- 9784873115856
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
技書の森解説
Linux 上でファイルを開き、プロセスを生み、シグナルを受け取り、ソケットで通信する。そのたびにプログラムはカーネルに何を頼み、カーネルは何を返してくるのか。この境界を API 単位で徹底的に説明するのが『Linux プログラミングインタフェース』 (Michael Kerrisk 著、千住治郎 訳、オライリー・ジャパン発行、オーム社発売、2012 年 12 月刊) です。原書は "The Linux Programming Interface" で、版元はこの本を Linux の man ページプロジェクト主催者による Linux プログラマ必携のリファレンスと位置づけ、対象を Linux 開発者、主にシステムプログラマとアプリケーションプログラマに置いています。C 言語でシステムコールやライブラリ関数を直接呼ぶ立場の人が、通読と辞書的な参照の両方に使うことを前提とした大著です。
全 64 章と付録 A から F の構成、ファイル I/O からソケットまで
構成は全 64 章と付録 A から F です。1 章から 3 章で UNIX の歴史と標準化、基礎概念、システムプログラミングの土台を固め、4 章と 5 章でファイル I/O、6 章から 12 章でプロセス、メモリ割り当て、ユーザとグループ、プロセスの権限、時間、システムの制限とオプション機能、システム情報とプロセス情報を扱います。13 章から 19 章は I/O のバッファリング、ファイルシステム、ファイルの属性、ファイルの拡張属性、ACL、ディレクトリとリンク、ファイルイベントの各論、20 章から 22 章はシグナルを 3 章かけて掘り下げ、23 章のタイマとスリープにつなげます。24 章から 28 章がプロセス作成からプログラムの実行まで、29 章から 33 章がスレッドを 5 章で解説し、34 章以降はプロセスグループ、セッション、ジョブコントロール、プロセスの優先度とスケジューリング、デーモン、セキュアな特権プログラムの開発、ケーパビリティ、共有ライブラリと進みます。43 章から 55 章はパイプと FIFO、System V IPC、メモリマッピング、POSIX IPC、ファイルロックといったプロセス間通信、56 章から 61 章はソケットを 6 章で、62 章から 64 章は端末、高度な I/O モデル、疑似端末です。64 章すべてに章のまとめが置かれ、大半の章には演習が付き、付録にはシステムコールのトレース、カーネルコンフィギュレーション、演習の解答例 (一部) などが収められています。
システムコールと glibc、POSIX 標準を土台にした技術背景
ユーザ空間のプログラムがカーネルの機能を使う入口は システムコール に集約されており、C プログラムからは通常 glibc が提供するラッパー関数を通して呼び出します。open () が返す ファイルディスクリプタ を、通常ファイルにもパイプにもソケットにも同じ read () と write () で使えるという統一モデルは UNIX 系 OS の設計の核心で、本書が 4 章の題をファイル I/O:統一されたインタフェースとしているのはこの思想を最初に据えるためです。難しいのは、同じ関数名でも POSIX.1-2001 や POSIX.1-2008、Single UNIX Specification で規定された範囲と、Linux だけが提供する拡張との境目が見えにくいことです。本書は 1 章で UNIX 標準仕様の時系列と Linux Standard Base を整理し、3 章で可搬性と機能検査マクロを扱ってから各論に入るため、ある API が移植可能なのか Linux 固有なのかを常に意識しながら読み進められます。man ページは仕様を簡潔に述べる文書であり、なぜその引数なのか、どんな競合状態や落とし穴があるのかまでは語りません。man ページを書く側の著者がその背景と設計意図を書き下ろしている点が、本書の厚みの正体です。
epoll や inotify など Linux 独自 API の読みどころ
Linux 固有の機能を避けずに扱うのが本書の特色です。63 章の高度な I/O モデルでは、select () と poll () の比較と問題点を踏まえたうえで epoll API を epoll_create ()、epoll_ctl ()、epoll_wait () の順に説明し、多重 I/O と epoll の性能比較、エッジトリガ通知まで踏み込みます。19 章のファイルイベントは inotify API とイベントの読み取り、キューの上限を扱い、古い方法である dnotify にも触れます。39 章のケーパビリティと 38 章のセキュアな特権プログラムの開発は、最小の権限、バッファオーバラン予防策、ユーザ入力や環境を信頼してはいけないといった項目を並べ、set-user-ID プログラムを書く人が踏むべき手順を示します。60 章のソケット: サーバ設計では反復サーバと並行サーバ、inetd を比較し、30 章のスレッド: 同期では mutex と条件変数を性能やデッドロックの観点を含めて解説します。多数の接続をさばくサーバ、常駐するデーモン、特権を必要とするツールを Linux 向けに書く人にとって、設計判断の根拠をそのまま参照できる章が揃っています。
C 言語の前提と 2012 年刊という時点の読み方、向かない人
前提となるのは C 言語です。ポインタ、構造体、ヘッダファイルを読み書きできれば十分ですが、サンプルプログラムはすべて C なので、他言語だけの経験で臨むと序盤から負荷がかかります。またこの本はシェル操作やサーバ管理の入門書ではなく、カーネル内部のコードを読み解く本でもありません。扱うのはユーザ空間から見たインタフェースであり、カーネルが内部で何をしているかはインタフェースの挙動を説明するのに必要な範囲にとどまります。2012 年刊のため、記述は刊行時点のカーネルと glibc を前提としており、その後に追加されたシステムコールは載っていません。ただしカーネルとユーザ空間の間のインタフェースは互換性を保つことが重視される領域なので、この種の解説は内部実装の解説に比べて古びにくいという性質があります。書店掲載の書誌 (出版社提供) による刊行当時の著者紹介では、Kerrisk は UNIX のユーザ / プログラマとして 20 年の経験を持ち、2004 年から man-pages プロジェクトのメンテナンスを担当し、250 以上の項目のマニュアルページの執筆者または共同執筆者で、新バージョンの Linux カーネルのユーザ空間インタフェースのテストと設計レビューも担当するとされています。訳者の千住治郎は昭和 63 年から UNIX を使用してソフトウェア開発を行ってきた人物と紹介されています。
プロセスとスレッド の使い分け、シグナルと競合状態の扱い、ファイルロックや共有メモリの選択など、Linux 上の低レイヤで一度は迷う問いに、仕様と背景の両面から答えが載っている本です。C でネットワークサーバやシステムツール、言語ランタイムやミドルウェアの Linux 対応部分を書く人、man ページを読んでも設計の理由が分からず手が止まる人は、必要な章を引くだけでも投じた金額を早く回収できます。厚さに見合う読者は限られますが、その読者にとっては長く机上に置く一冊になります。
言及した記事 (17 件)
【最新技術に振り回されない】 低レイヤーに強くなるための鉄板コンテンツ集
♡ 1078CPU, コンパイラ, OS, システムプログラミング, 低レイヤクラウドが好きな大学生が読んで良さげだった本を紹介する
♡ 292技術書, 書評, 初心者エンジニア, プログラミング初心者Linux シグナルの基本と仕組み (カーネル v5.5 時点)
♡ 284Linux, kernel, まとめ, コードリーディング, signalシグナルハンドラにprintf()を書いてはいけない
♡ 220C, Linux, UNIX, signalRust のデバッグチートシート
♡ 148Rust, gdb, rust-gdbmanの読み方(初心者向け)
♡ 100Linux基本ぼくのかんがえた さいきょうの新人研修
♡ 44新人研修, 新人教育, 新人プログラマ応援behaviour を使ってできること
♡ 20ElixirOmega2 というWi-Fi内蔵・Linux搭載のコンピューターが気になりはじめました
♡ 18Linux, OpenCV, RaspberryPi, Omega2Go言語の言語特性を学ぶ
♡ 10Go
この本に興味がある方におすすめ
関連する本
関連記事
ゲームが好きならプログラミングの本も読める
ゲームの攻略本を読んだことがあるなら、プログラミングの本も読めます。攻略本とプログラミング本の共通点から、読書のハードルを下げます。
有名プログラマの読書習慣 - 天才たちは何を読んできたのか
リーナス・トーバルズ、まつもとゆきひろ、ビル・ゲイツなど、著名なプログラマたちの読書習慣と愛読書を紹介し、天才たちの読書スタイルから学べることを探ります。
ペアプログラミングのように本を読む - 2 人 1 組の輪読術
ペアプログラミングの手法を読書に応用する「ペアリーディング」を紹介します。1 人がナビゲーター、1 人がドライバーの役割でその場で一緒に読む進め方と、向いている本をまとめます。