詳解Unixシステムプログラミング
TOC
UNIXシステムの概要
UNIXの規格と実装
File I/O
File and Directory
Standard I/O Library
System Data Files and Information
Process Environment
Process Control
Process Relationships
Signals
Threads
Thread Control
Daemon Processes
Advanced I/O
Interprocess Communications
Network IPC: Sockets
Advanced IPC
Terminal I/O
Pseudo Terminals
Database Library
Communicating with Network Printer
Detailed
1 UNIX システムの概要
1.1 はじめに
1.2 UNIX のアーキテクチャ
1.3 ログイン
1.4 ファイルとディレクトリ
1.5 入出力
1.6 プログラムとプロセス
1.7 エラー処理
1.8 ユーザの識別
1.9 シグナル
1.10 時間
1.11 システムコールとライブラリ関数群
1.12 まとめ
2 UNIX の規格と実装
2.1 はじめに
2.2 UNIX の規格
2.2.1 ISO C
2.2.2 IEEE POSIX
2.2.3 Single UNIX Specification
2.2.4 FIPS
2.3 UNIX システムの実装
2.3.1 UNIX System V Release 4
2.3.2 4.4BSD
2.3.3 FreeBSD
2.3.4 Linux
2.3.5 Mac OS X
2.3.6 Solaris
2.3.7 その他のUNIX システム
2.4 規格と実装の関係
2.5 制限事項
2.5.1 ISO C の制限事項
2.5.2 POSIX の制限事項
2.5.3 XSI の制限事項
2.5.4 関数sysconf、pathconf、fpathconf
2.5.5 不定な実行時の制限事項
2.6 オプション
2.7 機能テストマクロ
2.8 基本システムデータ型
2.9 規格間の違い
2.10 まとめ
3 ファイル入出力
3.1 はじめに
3.2 ファイル記述子
3.3 関数open とopenat
3.4 関数creat
3.5 関数close
3.6 関数lseek
3.7 関数read
3.8 関数write
3.9 入出力の効率
3.10 ファイル共有
3.11 不可分(アトミック) 操作
3.12 関数dup とdup2
3.13 関数sync、fsync、fdatasync
3.14 関数fcntl
3.15 関数ioctl
3.16 /dev/fd
3.17 まとめ
4 ファイルとディレクトリ
4.1 はじめに
4.2 関数stat、fstat、fstatat、lstat
4.3 ファイルの種類
4.4 セットユーザID とセットグループID
4.5 ファイルアクセス許可
4.6 新規ファイルとディレクトリの所有権
4.7 関数access とfaccessat
4.8 関数umask
4.9 関数chmod、fchmod、fchmodat
4.10 スティッキビット
4.11 関数chown、fchown、fchownat、lchown
4.12 ファイルサイズ
4.13 ファイルの切り詰め
4.14 ファイルシステム
4.15 関数link、linkat、unlink、unlinkat、remove
4.16 関数rename、renameat
4.17 シンボリックリンク
4.18 シンボリックリンクの作成と読み取り
4.19 ファイルの時刻
4.20 関数futimens、utimensat、utimes
4.21 関数mkdir、mkdirat、rmdir
4.22 ディレクトリの読み取り
4.23 関数chdir、fchdir、getcwd
4.24 装置特殊ファイル
4.25 ファイルアクセス許可ビットのまとめ
4.26 まとめ
5 標準入出力ライブラリ
5.1 はじめに
5.2 ストリームとFILE オブジェクト
5.3 標準入力、標準出力、標準エラー
5.4 バッファリング
5.5 ストリームのオープン
5.6 ストリームの読み書き
5.7 行単位入出力
5.8 標準入出力の効率
5.9 バイナリ入出力
5.10 ストリームの位置決め
5.11 書式付き入出力
5.12 実装の詳細
5.13 一時ファイル
5.14 メモリストリーム
5.15 標準入出力の代替
5.16 まとめ
6 システムデータファイルと情報
6.1 はじめに
6.2 パスワードファイル
6.3 シャドーパスワードファイル
6.4 グループファイル
6.5 補助グループID
6.6 実装の差異
6.7 その他のデータファイル
6.8 ログイン記録
6.9 システムの識別
6.10 時間と日付のルーティン
6.11 まとめ
7 プロセスの環境
7.1 はじめに
7.2 関数main
7.3 プロセスの終了
7.4 コマンド行引数
7.5 環境リスト
7.6 C プログラムのメモリ配置
7.7 共有ライブラリ
7.8 メモリ割り付け
7.9 環境変数
7.10 関数setjmp とlongjmp
7.11 関数getrlimit とsetrlimit
7.12 まとめ
8 プロセスの制御
8.1 はじめに
8.2 プロセス識別子
8.3 関数fork
8.4 関数vfork
8.5 exit 関数群
8.6 関数wait とwaitpid
8.7 関数waitid
8.8 関数wait3 とwait4
8.9 レースコンディション
8.10 exec 関数群
8.11 ユーザID とグループID の変更
8.12 解釈実行ファイル
8.13 関数system
8.14 プロセスの実行記録
8.15 ユーザの識別
8.16 プロセススケジューリング
8.17 プロセス時間
8.18 まとめ
9 プロセスの関係
9.1 はじめに
9.2 端末ログイン
9.3 ネットワークログイン
9.4 プロセスグループ
9.5 セッション
9.6 制御端末
9.7 関数tcgetpgrp、tcsetpgrp、tcgetsid
9.8 ジョブ制御
9.9 シェルのプログラム実行
9.10 親のないプロセスグループ
9.11 FreeBSD の実装
9.12 まとめ
10 シグナル
10.1 はじめに
10.2 シグナルの概念
10.3 関数signal
10.4 信頼できないシグナル
10.5 割り込まれたシステムコール
10.6 再入可能関数
10.7 SIGCLD の意味
10.8 信頼できるシグナルの用語と意味
10.9 関数kill とraise
10.10 関数alarm とpause
10.11 シグナルセット
10.12 関数sigprocmask
10.13 関数sigpending
10.14 関数sigaction
10.15 関数sigsetjmp とsiglongjmp
10.16 関数sigsuspend
10.17 関数abort
10.18 関数system
10.19 関数sleep、nanosleep、clock nanosleep
10.20 関数sigqueue
10.21 ジョブ制御シグナル
10.22 シグナル名と番号
10.23 まとめ
11 スレッド
11.1 はじめに
11.2 スレッドの概念
11.3 スレッド識別子
11.4 スレッドの作成
11.5 スレッドの終了
11.6 スレッドの同期
11.6.1 ミューテックス(mutexes)
11.6.2 デッドロックの回避
11.6.3 関数pthread mutex timedlock
11.6.4 リーダ-ライタロック
11.6.5 時間切れリーダ-ライタロック
11.6.6 条件変数
11.6.7 スピンロック
11.6.8 バリア
11.7 まとめ
12 スレッドの制御
12.1 はじめに
12.2 スレッドの制限事項
12.3 スレッドの属性
12.4 同期の属性
12.4.1 ミューテックス属性
12.4.2 リーダ-ライタロック属性
12.4.3 条件変数属性
12.4.4 バリア属性
12.5 再入可能性
12.6 スレッド固有のデータ
12.7 キャンセル操作
12.8 スレッドとシグナル
12.9 スレッドとfork
12.10 スレッドと入出力
12.11 まとめ
13 デーモン
13.1 はじめに
13.2 デーモンの特性
13.3 コーディング規則
13.4 エラーログ
13.5 単一インスタンスデーモン
13.6 デーモンの慣習
13.7 クライアント-サーバモデル
13.8 まとめ
14 高度な入出力
14.1 はじめに
14.2 非ブロック入出力
14.3 レコードロック
14.4 入出力マルチプレクス
14.4.1 関数select とpselect
14.4.2 関数poll
14.5 非同期入出力
14.5.1 System V の非同期入出力
14.5.2 BSD の非同期入出力
14.5.3 POSIX の非同期入出力
14.6 関数readv とwritev
14.7 関数readn とwriten
14.8 メモリマップト入出力
14.9 まとめ
15 プロセス間通信
15.1 はじめに
15.2 パイプ
15.3 関数popen とpclose
15.4 コプロセス
15.5 FIFO
15.6 XSI IPC
15.6.1 識別子とキー
15.6.2 アクセス許可構造
15.6.3 構成制限
15.6.4 利点と欠点
15.7 メッセージキュー
15.8 セマフォ
15.9 共有メモリ
15.10 POSIX セマフォ
15.11 クライアント-サーバ特性
15.12 まとめ
16 ネットワークIPC: ソケット
16.1 はじめに
16.2 ソケット記述子
16.3 アドレシング
16.3.1 バイト順序
16.3.2 アドレス形式
16.3.3 アドレス検索
16.3.4 ソケットへのアドレス付け
16.4 接続の確立
16.5 データ転送
16.6 ソケットオプション
16.7 優先配送データ
16.8 非ブロック/非同期入出力
16.9 まとめ
17 高度なプロセス間通信
17.1 はじめに
17.2 UNIX ドメインソケット
17.2.1 UNIX ドメインソケットの名前付け
17.3 一意な接続
17.4 ファイル記述子の渡し方
17.5 オープンサーバ、バージョン1
17.6 オープンサーバ、バージョン2
17.7 まとめ
18 端末入出力
18.1 はじめに
18.2 概要
18.3 特殊入力文字
18.4 端末属性の取得と設定
18.5 端末オプションフラグ
18.6 コマンドstty
18.7 ボーレート関数群
18.8 ライン制御関数群
18.9 端末識別
18.10 カノニカルモード
18.11 非カノニカルモード
18.12 端末ウィンドウサイズ
18.13 termcap、terminfo、curses
18.14 まとめ
19 擬似端末
19.1 はじめに
19.2 概要
19.3 擬似端末装置のオープン
19.4 関数pty fork
19.5 プログラムpty
19.6 プログラムpty の使用
19.7 高度な機能
19.8 まとめ
20 データベースライブラリ
20.1 はじめに
20.2 歴史
20.3 ライブラリ
20.4 実装の概要
20.5 集中か非集中?
20.6 並行性
20.7 ライブラリの構築
20.8 ソースコード
20.9 実行効率
20.10 まとめ
21 ネットワークプリンタとの通信
21.1 はじめに
21.2 インターネットプリンティングプロトコル
21.3 ハイパーテキストトランスファープロトコル
21.4 プリンタスプーリング
21.5 ソースコード
21.6 まとめ
付録A 関数プロトタイプ
付録B その他のソースコード
B.1 自前のヘッダファイル
B.2 標準エラールーティン群