Linuxシステムコールプログラミング
2009年9月25日紙版発売
山森丈範 著
A5判/304ページ
定価2,728円(本体2,480円+税10%)
ISBN 978-4-7741-3970-8
ただいま弊社在庫はございません。
書籍の概要
この本の概要
本書はC言語プログラムからシステムコールを呼び出す技法について解説します。システムコールの基礎から関数の使い方,最終的にはシステムコールを利用した簡易コマンドの開発までをカバーします。
こんな方におすすめ
- Linuxの内部で行われている処理について興味がある方
- Linuxのシステムコールの仕組みについて知りたい方
著者の一言
OSがどのような仕組みで動いているのかを考える時,その突破口として,システムコールについて考えてみるのは,非常に有意義なことです。OSにはどのようなシステムコールがあり,それらはどのようなコマンドまたはCライブラリ関数に利用されているのか,本書はそのような興味に答えることを念頭に置いた,Linuxのシステムコールの解説書です。
本書がシステムコールの理解のお役に立てれば幸いです。
(本書前書きより抜粋)
本書のサンプル
本書の一部ページを,PDFで確認することができます。
- サンプルPDFファイル(469KB)
目次
第1章 システムコールを勉強する前に
- 1-1 システムコールとは?
- 1-2 システムコールの実装
- 1-3 システムコールとCライブラリ関数
- 1-4 オンラインマニュアルの参照方法
- 1-5 システムコールのエラーチェック
第2章 プロセス関連のシステムコール
- 2-1 fork 新しい子プロセスを作成する
- 2-2 execve 指定したプログラムを実行する
- 2-3 exit プロセスを終了する
- 2-4 wait/waitpid/wait3/wait4 子プロセスの終了を待つ
- 2-5 getpid/getppid 自分または親のプロセスIDを取得する
- 2-6 chdir/fchdir カレントディレクトリを変更する
- 2-7 chroot ルート(/)ディレクトリを変更する
- 2-8 getpriority/setpriority プロセスの優先度を取得/設定する
- 2-9 getuid/geteuid/getgid/getegid プロセスの実ユーザID/実効ユーザID/実グループID/実効グループIDを取得
- 2-10 setuid/seteuid/setreuid/setgid/setegid/setregid プロセスの実ユーザID/実効ユーザID/実グループID/実効グループIDを設定
- 2-11 getpgid/setpgid プロセスグループIDを取得/設定する
- 2-12 setsid 新しいセッションを作成する
- 2-13 getsid プロセスのセッションIDを取得する
- 2-14 getgroups/setgroups プロセスの補助グループIDを取得/設定する
- 2-15 getrusage システムリソースの使用量を取得する
- 2-16 getrlimit/setrlimit システムリソースの使用量の上限を取得/設定する
第3章 ファイル入出力関連のシステムコール
- 3-1 open ファイルをオープンする
- 3-2 read ファイル記述子で指定するファイルを読み込む
- 3-3 write ファイル記述子で指定するファイルに書き込む
- 3-4 close ファイルをクローズし,ファイル記述子を解放する
- 3-5 umask ファイル作成時のmodeマスク値(umask値)を変更する
- 3-6 lseek ファイルの読み書き位置を,指定オフセット位置に移動する
- 3-7 link ファイルのハードリンクを作成する
- 3-8 unlink ファイルのエントリを削除する
- 3-9 rename ファイル名または場所を変更する
- 3-10 mkdir ディレクトリを作成する
- 3-11 rmdir ディレクトリを削除する
- 3-12 symlink シンボリックリンクを作成する
- 3-13 readlink シンボリックリンクの内容を読む
- 3-14 truncate/ftruncate ファイルサイズを切り詰める
- 3-15 chmod/fchmod ファイルのモード(パーミッション)を変更する
- 3-16 chown/lchown/fchown ファイルの所有者とグループを変更する
- 3-17 access 実ユーザ/実グループで,ファイルのアクセス権をチェックする
- 3-18 mknod 特殊ファイル,FIFOなどを作成する
- 3-19 stat/lstat/fstat ファイルの各種ステータスを取得する
- 3-20 utime/utimes ファイルの修正時刻とアクセス時刻を変更する
- 3-21 select 複数のファイル記述子を同時に監視する
- 3-22 poll 複数のファイル記述子を同時に監視する
- 3-23 pipe パイプを生成する
- 3-24 dup/dup2 ファイル記述子を複製する
- 3-25 fcntl ファイル記述子に関する操作を行う
- 3-26 ioctl デバイスの制御を行う
- 3-27 flock 同一ホスト内でファイルをロックする
- 3-28 getdents ディレクトリのエントリを取得する
- 3-29 statvfs/fstatvfs ファイルシステムの情報を取得する
- 3-30 getdtablesize オープンできるファイル数の最大値を取得する
- 3-31 sync 更新されたバッファキャッシュをディスクに書き込む
- 3-32 fsync ファイル記述子を指定してsyncを行う
- 3-33 readv/writev 複数のバッファを使ってファイルを読み書きする
- 3-34 pread/pwrite オフセットを指定してファイルを読み書きする
- 3-35 creat 新規ファイルを作成しオープンする
第4章 メモリ関連のシステムコール
- 4-1 mmap/munmap ファイルをメモリにマップ/マップ解除する
- 4-2 mprotect メモリのアクセス保護を変更する
- 4-3 brk/sbrk ヒープ領域にメモリを動的に割り当てまたは解放する
- 4-4 getpagesize システムのページサイズを取得する
第5章 シグナル関連のシステムコール
- 5-1 kill シグナルを送信する
- 5-2 sigaction シグナル受信時の動作を設定する
- 5-3 sigsuspend 一時的にシグナルマスクを変更し,シグナルの到着を待つ
- 5-4 getitimer/setitimer インターバルタイマの値を取得/設定する
- 5-5 signal シグナル受信時の動作を設定する(従来方式)
第6章 時刻関連のシステムコール
- 6-1 gettimeofday/settimeofday 時刻を取得/設定する
- 6-2 time/stime 時刻を取得/設定する
- 6-3 nanosleep ナノ秒単位でプロセスを停止する
第7章 システム属性関連のシステムコール
- 7-1 uname 各種システム情報を取得する
- 7-2 gethostname/sethostname ホスト名を取得/設定する
- 7-3 getdomainname/setdomainname NISドメイン名を取得/設定する
第8章 ネットワーク(ソケット)関連のシステムコール
- 8-1 socket 通信のためのソケットを作成する
- 8-2 bind ソケットにソケットアドレスを割り当てる
- 8-3 listen 接続型ソケットを接続待ち状態にする
- 8-4 accept 接続型ソケットへの接続を受け付ける
- 8-5 connect ソケットに接続する
- 8-6 recvfrom ソケットからデータを受信する
- 8-7 sendto ソケットにデータを送信する
- 8-8 getsockopt/setsockopt ソケットのオプションを取得/設定する
- 8-9 shutdown 接続中のソケットの通信を遮断する
- 8-10 getpeername/getsockname 接続先または自分のソケットアドレスを取得する
第9章 間接システムコール
- 9-1 syscall 間接的にシステムコールを行う
- 9-2 socketcall ソケット関連のシステムコールを呼び出す(Linux特有)
第10章 システムコールで簡易版UNIXコマンドを作成する
- 10-1 簡易echoコマンドの作成
- 10-2 簡易catコマンドの作成
- 10-3 簡易catコマンドの作成
- 10-4 簡易cpコマンドの作成
- 10-5 簡易cp -pコマンドの作成
- 10-6 簡易lnコマンドの作成
- 10-7 簡易mkdirコマンド
- 10-8 簡易rm/rmdirコマンドの作成
- 10-9 簡易touchコマンドの作成
- 10-10 簡易版whoamiコマンドの作成
- 10-11 簡易sleepコマンドの作成(nanosleep版)
- 10-12 簡易sleepコマンドの作成(select版)
- 10-13 簡易niceコマンドの作成
- 10-14 簡易timeコマンドの作成
- 10-15 簡易unameコマンドの作成
- 10-16 簡易netcatコマンドの作成
この本に関連する書籍
-
zshの本
zshはBourne Shellをベースにtcshやkshの拡張機能を取り込んだUNIX系シェルの1つですが,“z”という文字が表しているようにまさに最後のシェルと呼ばれるにふさわしい高...
-
はじめての vi & Vim
本書は,UNIXの標準エディタであるvi(もしくはその互換エディタ)をマスターするための入門書です。viは,その操作方法などが,Windowsのエディタと大きく異なるために...