Linuxシステムプログラミング

[cover photo]
  • 2008年04月 発行
  • 396ページ
  • ISBN978-4-87311-362-3
  • 原書: Linux System Programming
  • フォーマット 本 PDF

オライリー・ジャパンで書籍を購入:
定価3,888円

Ebook Storeで電子版を購入:
価格3,110円

本書には、Linuxの概要、カーネル、Cライブラリ、Cコンパイラなどプログラミングの基礎知識から、ファイルI/O、バッファサイズ管理、メモリマッピング、最適化技術、システムコール、メモリ管理まで、プログラマの観点から実践的なトピックが多く盛り込まれています。Linuxカーネル動作についても、その内部実装よりもプログラマがソースコードを書くために必須の知識が凝縮されています。実践的なプログラミング能力の習得に役立つ一冊です。カーネル2.6対応。

関連書籍

Linuxカーネル クイックリファレンス
Linuxデバイスドライバ 第3版
詳解 Linuxカーネル 第3版

まえがき

1章 概要および主要概念
	1.1 システムプログラミング
	1.2 APIとABI
	1.3 標準仕様
	1.4 Linuxプログラミングの概念
	1.5 システムプログラミングへ出発

2章 ファイルI/O
	2.1 ファイルのオープン
	2.2 ファイル読み取り: read()
	2.3 ファイル書き込み: write()
	2.4 同期I/O
	2.5 ダイレクトI/O
	2.6 ファイルクローズ
	2.7 ファイルシーク:lseek()
	2.8 ファイルポジション指定I/O
	2.9 ファイルトランケート
	2.10 I/Oの多重化
	2.11 カーネル内の動作
	2.12 章の結び

3章 I/Oのバッファリング
	3.1 ユーザ空間のI/Oバッファリング
	3.2 標準I/O
	3.3 ストリームのオープン
	3.4 ファイルディスクリプタを介したストリームオープン
	3.5 ストリームのクローズ
	3.6 ストリームの読み取り
	3.7 ストリームの書き込み
	3.8 サンプルコード:ユーザ空間のバッファリング
	3.9 ストリームのシーク
	3.10 ストリームのフラッシュ
	3.11 エラーとEOF
	3.12 ストリームとファイルディスクリプタ
	3.13 バッファリングの制御
	3.14 スレッドセーフ
	3.15 標準I/Oライブラリに対する批判
	3.16 章の結び

4章 高度なファイルI/O
	4.1 scatter-gather I/O
	4.2 Event Pollインタフェース
	4.3 ファイルをメモリへマッピングする
	4.4 ファイルI/Oのヒント/アドバイスを与える
	4.5 2種類の同期/非同期
	4.6 I/OスケジューラとI/O パフォーマンス
	4.7 章の結び

5章 プロセス管理
	5.1 プロセスID
	5.2 新規プロセスの起動
	5.3 プロセスの終了
	5.4 子プロセスの終了を待つ
	5.5 ユーザとグループ
	5.6 セッションとプロセスグループ
	5.7 デーモン
	5.8 章の結び

6章 高度なプロセス管理
	6.1 プロセススケジューリング
	6.2 プロセッサを自発的に手離す
	6.3 プロセスの優先度
	6.4 プロセッサアフィニティ
	6.5 リアルタイムシステム
	6.6 リソースリミット

7章 ファイル、ディレクトリの管理
	7.1 ファイルとメタデータ
	7.2 ディレクトリ
	7.3 ファイルのリンク
	7.4 ファイルのコピーと移動
	7.5 デバイスノード
	7.6 ioctl()
	7.7 ファイルイベントの監視

8章 メモリ管理
	8.1 プロセスアドレス空間
	8.2 動的メモリの割り当て
	8.3 データセグメントの管理
	8.4 無名メモリマッピング
	8.5 高度なメモリ割り当て
	8.6 メモリ割り当てのデバッグ
	8.7 スタック上のメモリ割り当て
	8.8 メモリ割り当て方法の選択
	8.9 メモリ操作
	8.10 メモリのロック
	8.11 メモリの遅延割り当て

9章 シグナル
	9.1 シグナルの概念
	9.2 シグナル処理の基礎
	9.3 シグナルの送信
	9.4 リエントラント
	9.5 シグナルセット
	9.6 シグナルのブロック
	9.7 高度なシグナル処理
	9.8 シグナルとともにデータを送信する
	9.9 章の結び

10章 時 間
	10.1 時刻を表現する構造体
	10.2 POSIXクロック
	10.3 現在時刻の参照
	10.4 現在時刻の設定
	10.5 さまざまな時間表現
	10.6 システムの時計を合わせる
	10.7 スリープ
	10.8 タイマ

付録 C言語のGCC拡張
	A.1 GNU C
	A.2 インライン関数
	A.3 インライン展開の抑制
	A.4 ピュア関数
	A.5 コンスタント関数
	A.6 リターンしない関数
	A.7 メモリを割り当てる関数
	A.8 戻り値の確認が必要な関数
	A.9 使用されたくない関数
	A.10 コールしていないが使用している関数
	A.11 使用していない関数またはパラメータ
	A.12 構造体のパッキング
	A.13 変数のアラインメント指定
	A.14 グローバル変数のレジスタ指定
	A.15 分岐ヒント
	A.16 式の型を得る
	A.17 型のアラインメントを得る
	A.18 構造体内のメンバオフセット
	A.19 関数のリターンアドレスを得る
	A.20 範囲指定のswitch-case
	A.21 voidポインタ、関数ポインタに対する演算
	A.22 移植性と可読性を同時に確保する

参考文献
索 引

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

1、2刷正誤表

Linuxシステムプログラミング 第1、第2刷正誤表

2010年2月3日更新

位置
p209
1番目の
コード
14行目
ret = chmod ("manifest.txt", -1, gr->gr_gid); ret = chown ("manifest.txt", -1, gr->gr_gid);
p309
2行目
SA_NOCLDWAIT SA_NOMASK
p325
第2段落
2行目
timezone構造体およびパラメータtz現在では timezone構造体およびパラメータtz現在では
p326
10.3.3
1行目
times()システムコールは times()システムコールは

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

3~5刷正誤表

Linuxシステムプログラミング 第3~5刷正誤表

2018年3月28日更新

p.13、15行目
【誤】再び12番目のバイトへアクセスできます。
【正】再び12番目のバイトへアクセスできます。

p.26、一番下のO_SYNCの項目の1行目
【誤】同期I/O(synchronous I/O)用にファイルを
【正】同期I/O(synchronized I/O)用にファイルを

p.28、真ん中より少し下
【誤】S_IRGRP
グループメンバに対する読み取り実行許可
【正】S_IRGRP
グループメンバに対する読み取り許可

p.30
【誤】「1章 概念主要概念」
【正】「1章 概念および主要概念」

p.33
【誤】複数のファイルに対しも
【正】複数のファイルに対しても

p.41、最終行
【誤】inodeが持つファイルアクセス時間を更新しなければ
【正】inodeが持つファイルアクセス時間を更新しなければ

p.51
【誤】errnoへは以下の値のうち1つを設定します
【正】errnoへは以下の値のうち1つを設定します

p.55
【誤】1つfdsへ渡すだけですpollfd構造体は
【正】1つfdsへ渡すだけですpollfd構造体は

p.56
【誤】または両方が可能になったをテストする
【正】または両方が可能になったをテストする

p.59、17行目
誤:pselect()
正:poll()

p.62
【誤】自身のキャッシュを実装でもしない限り
【正】自身のキャッシュを実装しない限り

p.65
【誤】「1章 概念主要概念」で述べた、
【正】「1章 概念および主要概念」で述べた、

p.69、足跡マークの下1行目
【誤】FILEポインタ
【正】ファイルポインタ

p.80、15行目
【誤】feof()はエラー状態がセットされていれば非0を
【正】feof()はEOFがセットされていれば非0を

p.82
【誤】main()からリターンする前に
【正】main()からリターンする前に

p.87
【誤】I/Oサブシステムについて解説します
【正】I/Oサブシステムについて解説します

p.88
【誤】1つのベクタI/Oにまとめらる。
【正】1つのベクタI/Oにまとめらる。

p.89
【誤】セグメントを表すデータを内部でメモリ割り当てる必要が
【正】セグメントを表すデータを内部でメモリ割り当てる必要が

p.90
【誤】標準でもこの動作許容しており
【正】標準でもこの動作許容しており

p.131
【誤】「1章 概念主要概念」
【正】「1章 概念および主要概念」

p.137
【誤】または必要共有ライブラリが
【正】または必要共有ライブラリが

p.155
【誤】また「1章 概念主要概念」でも
【正】また「1章 概念および主要概念」でも

p.177、10行目
【誤】あるCPU上で実行した以降は、
【正】あるCPU上で実行すると、それ以降は

p.186
【誤】以外のスケジューリングポリシーへ変更する場合、
【正】以外のスケジューリングポリシーへ変更する場合、

p.191、3番目の箇条書き
【誤】ビジーウェイトは特に慎重に設計する
【正】ビジーウェイトは特に慎重に設計する

p.195、下から3番目のRLIMIT_DATA
「SIGKILLシグナルを送信し終了させる(脚注)。」の脚注追加
† 訳者注:バージョン2.6.16以前のLinuxカーネルでは、RLIMIT_CPUに0秒を設定するとRLIM_INFINITYとして処理していました。バージョン2.6.17以降では1秒として処理されます。

p.196、下から4番目のRLIMIT_NICEの項目
「20 - rlim_curとして処理する(脚注)。」の脚注追加
† 訳者注:バージョン2.6.12のLinuxカーネルではバグがあり、19 - rlim_curと処理されていました。

p.197、一番上のRLIMIT_RTPRIOの項目
「Linuxカーネルで導入された、Linux特有のものである(脚注)。」の脚注追加
† 訳者注:バージョン2.6.12のLinuxカーネルではバグのため実際には動作しません。バージョン2.6.13で修正されました。

p.201
【誤】「1章 概念主要概念」でも
【正】「1章 概念および主要概念」でも

p.202
【誤】ついては「1章 概念
【正】ついては「1章 概念および

p.203
【誤】ファイルが穴空き(sparseファイル)の場合では
【正】ファイルが穴空き(sparseファイル)の場合では

p.209、2行目
【誤】実行するユーザがCAP_CHOWN   を持っている必要が
【正】実行するユーザがCAP_CHOWNケーパビリティを持っている必要が

p.210
【誤】特定のファイルシステム依存しない標準インタフェースを
【正】特定のファイルシステム依存しない標準インタフェースを

p.219、最終行
「標準化されているgetcwd()インターフェースです(脚注)。」の脚注追加
† 訳者注:getcwd()をシステムコールではなく、ライブラリとして実装しているUnixもあります。Linuxではバージョン2.1.92からシステムコールになりました。

p.230、7行目
コメントの右横に和訳を網掛けで追加。
ユーザ空間用には定義されていない。使用するには
_syscall3()マクロを用いなければならない。

p.249
【誤】のイベントともにcookieは同じ値、例えば
【正】のイベントともにcookieは同じ値、例えば

p.262、2行目
【誤】glibcでもこの問題デバッグする単純な
【正】glibcでもこの問題デバッグする単純な

p.304、表9-2、8行目
【誤】execle() execve() Exit()
【正】execle() execve() _Exit()

p.324、4行目
【誤】CLOCK_PROCESS_CPUTIME_IDはx86マシンの高分解能
【正】CLOCK_THREAD_CPUTIME_IDはx86マシンの高分解能

p.334、下から5行目
【誤】usecsの値が大きすぎることを
【正】usecの値が大きすぎることを

p.334、下から4行目
【誤】(Linuxではusecsの型が表現できる
【正】(Linuxではusecの型が表現できる

p.342、「10.8.3 高度なタイマ」の3行目
【誤】び削除処理3つに分離されています。
【正】び削除処理3つに分離されています。

p.345、中央あたり
【誤】
/* seconds */
/* nanoseconds */
【正】(和訳を網掛けで置く)
/* seconds */
/* nanoseconds */ ナノ秒

p.361
【誤】ここに挙げ書籍はすべて著者が
【正】ここに挙げ書籍はすべて著者が

p.362、Unix Network Programming, Volume 1の項目
【誤】
邦訳『UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI・ソケットとXTI』トッパン
【正】
第2版の邦訳は『UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI・ソケットとXTI』ピアソン・エデュケーション

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

6刷正誤表

Linuxシステムプログラミング 第6刷正誤表

2018年3月28日更新
p.80、9行目
【誤】EOFがセットされていればferror()は非0を
【正】エラー状態がセットされていればferror()は非0を

p.80、15行目
【誤】feof()エラー状態がセットされていれば非0を
【正】feof()EOFがセットされていれば非0を

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]