目次
第1章 システムコールの基礎知識
システムコールの実装
- 「int $0x80」を使ったシステムコール(32bit版Linux)
- 「sysenter」を使ったシステムコール(32bit版Linux)
- 「syscall」を使ったシステムコール(64bit版Linux)
- システムコールに使用されるCPUレジスタ
- システムコール番号を知る
システムコールとCライブラリ関数
- Cライブラリ関数を通したシステムコール
- Cライブラリ関数とシステムコールの関係
- システムコールの互換性のためのCライブラリ関数
オンラインマニュアルの参照方法
システムコールのエラーチェック
- エラーコードはerrnoに格納
- エラーメッセージを一覧表示するサンプルプログラム
第2章 プロセス関連のシステムコール
fork ……新しい子プロセスを作成する
- forkのサンプルプログラム
execve ……指定したプログラムを実行する
- 実効ユーザーID,保存ユーザーID等について
- execveのサンプルプログラム
- evecveの関連のCライブラリ関数
exit ……プロセスを終了する
- exitのサンプルプログラム
wait/waitpid/wait3/wait4/waitid ……子プロセスの終了を待つ
- waitのサンプルプログラム
- waitpidのサンプルプログラム
- wait3/wait4のサンプルプログラム
- waitidのサンプルプログラム
getpid/getppid ……自分または親のプロセスIDを取得する
- getpid/getppidのサンプルプログラム
chdir/fchdir ……カレントディレクトリを変更する
- chdir/fchdirのサンプルプログラム
chroot ……ルートディレクトリ(/)を変更する
- chrootのサンプルプログラム
getpriority/setpriority ……プロセスの優先度を取得/設定する
- getpriority/setpriorityのサンプルプログラム
getuid/geteuid/getgid/getegid ……プロセスの実ユーザーID/実効ユーザーID/実グループID/実効グループIDを取得する
- getuid/geteuid/getgid/getegidのサンプルプログラム
setuid/seteuid/setreuid/setgid/setegid/setregid ……プロセスの実ユーザーID/実効ユーザーID/実グループID/実効グループIDを設定する
- setuidのサンプルプログラム
- seteuidのサンプルプログラム
- setreuidのサンプルプログラム
- setresuid/setresgid/getresuid/getresgidについて
getpgid/setpgid ……プロセスグループIDを取得/設定する
- getpgid/setpgidのサンプルプログラム
- getpgrp/setpgrpについて
setsid ……新しいセッションを作成する
- setsidのサンプルプログラム
getsid ……プロセスのセッションIDを取得する
- getsidのサンプルプログラム
getgroups/setgroups ……プロセスの補助グループIDを取得/設定する
- getgroups/setgroupsのサンプルプログラム
getrusage ……システムリソースの使用量を取得する
- getrusageのサンプルプログラム
getrlimit/setrlimit ……システムリソースの使用量の上限を取得/設定する
- getrlimit/setrlimitのサンプルプログラム
第3章 ファイル入出力関連のシステムコール
open/openat/creat ……ファイルをオープンする
- openatシステムコール
- openatシステムコールの必要性
- creatシステムコールについて
- openのサンプルプログラム
- openatのサンプルプログラム
- fopen()とopenとの関係
read ……ファイル記述子で指定するファイルを読み込む
- readのサンプルプログラム
write ……ファイル記述子で指定するファイルに書き込む
- writeのサンプルプログラム
close ……ファイルをクローズし,ファイル記述子を解放する
- closeのサンプルプログラム
umask ……ファイル作成時のumask値(modeマスク値)を変更する
- umaskのサンプルプログラム
lseek ……ファイルの読み書き位置を,指定オフセット位置に移動する
- lseekのサンプルプログラム
link/linkat ……ファイルのハードリンクを作成する
- linkのサンプルプログラム
- linkatのサンプルプログラム
unlink/unlinkat ……ファイルのエントリを削除する
- unlinkのサンプルプログラム
- unlinkatのサンプルプログラム
rename/renameat ……ファイル名または場所を変更する
- renameのサンプルプログラム
- renameatのサンプルプログラム
mkdir/mkdirat ……ディレクトリを作成する
- mkdirのサンプルプログラム
- mkdiratのサンプルプログラム
rmdir ……ディレクトリを削除する
- rmdirのサンプルプログラム
symlink/symlinkat ……シンボリックリンクを作成する
- symlinkのサンプルプログラム
- symlinkatのサンプルプログラム
readlink/readlinkat ……シンボリックリンクの内容を読む
- readlinkのサンプルプログラム
- readlinkatのサンプルプログラム
truncate/ftruncate ……ファイルサイズを切り詰める
- truncate/ftruncateのサンプルプログラム
chmod/fchmod/fchmodat ……ファイルのモード(パーミッション)を変更する
- chmod/fchmodのサンプルプログラム
- fchmodatのサンプルプログラム
chown/lchown/fchown/fchownat ……ファイルの所有者とグループを変更する
- chown/lchown/fchownのサンプルプログラム
- fchownatのサンプルプログラム
access/faccessat ……実ユーザー/実グループで,ファイルのアクセス権をチェックする
- accessのサンプルプログラム
- faccessatのサンプルプログラム
mknod/mknodat ……特殊ファイル,FIFOなどを作成する
- mknodのサンプルプログラム
- mknodatのサンプルプログラム
stat/lstat/fstat/fstatat ……ファイルの各種ステータスを取得する
- stat/lstat/fstatのサンプルプログラム
- fstatatのサンプルプログラム
utime/utimes ……ファイルの修正時刻とアクセス時刻を変更する
- utime/utimesのサンプルプログラム
- lutimes/futimes/futimesatについて
utimensat/futimens ……ファイルの修正時刻とアクセス時刻を変更する(ナノ秒単位)
- utimensat/futimensのサンプルプログラム
select/pselect ……複数のファイル記述子を同時に監視する
- selectのサンプルプログラム
- pselectのサンプルプログラム
poll ……複数のファイル記述子を同時に監視する
- pollのサンプルプログラム
pipe ……パイプを生成する
- pipeのサンプルプログラム
dup/dup2 ……ファイル記述子を複製する
- dup/dup2のサンプルプログラム
fcntl ……ファイル記述子に関する操作を行う
- F_DUPFDを使ったファイル記述子の複製
- fcntl(F_DUPFD)のサンプルプログラム
- F_SETLKWを使ったファイルのロック
- fcntl(F_SETLKW)のサンプルプログラム
ioctl ……デバイスの制御を行う
- ioctlでIPアドレスを取得するサンプルプログラム
- ioctlで端末のウィンドウサイズを取得するサンプルプログラム
flock ……同一ホスト内でファイルをロックする
- flockのサンプルプログラム
getdents ……ディレクトリのエントリを取得する
- getdentsのサンプルプログラム
- readdir()のサンプルプログラム
statvfs/fstatvfs ……ファイルシステムの情報を取得する
- statvfs/fstatvfsのサンプルプログラム
getdtablesize ……オープンできるファイル数の最大値を取得する
- getdtablesizeのサンプルプログラム
sync ……更新されたバッファキャッシュをディスクに書き込む
- syncのサンプルプログラム
fsync ……ファイル記述子を指定してsyncを行う
- fsyncのサンプルプログラム
readv/writev ……複数のバッファを使ってファイルを読み書きする
- readv/writevのサンプルプログラム
pread/pwrite ……オフセットを指定してファイルを読み書きする
- pread/pwriteのサンプルプログラム
第4章 メモリ関連のシステムコール
mmap/munmap ……ファイルをメモリにマップ/マップ解除する
- mmap/munmapのサンプルプログラム
mprotect ……メモリのアクセス保護を変更する
- mprotectのサンプルプログラム
brk/sbrk ……ヒープ領域にメモリを動的に割り当て,または解放する
- brk/sbrkのサンプルプログラム
getpagesize ……システムのページサイズを取得する
- getpagesizeのサンプルプログラム
第5章 シグナル関連のシステムコール
kill ……シグナルを送信する
- killのサンプルプログラム
sigaction ……シグナル受信時の動作を設定する
- sigactionのサンプルプログラム
signal ……シグナル受信時の動作を設定する(従来方式)
- signalのサンプルプログラム
sigprocmask ……シグナルマスクを変更する
- sigprocmaskのサンプルプログラム
sigsuspend ……一時的にシグナルマスクを変更し,シグナルの到着を待つ
- sigsuspendのサンプルプログラム
sigpending ……ブロックされ保留中のシグナルがあるかどうか調べる
- sigpendingのサンプルプログラム
sigwaitinfo/sigtimedwait ……ブロックしたままシグナルの到着を待つ
- sigwaitinfoのサンプルプログラム
- sigtimedwaitのサンプルプログラム
getitimer/setitimer ……インターバルタイマーの値を取得/設定する
- getitimer/setitimerのサンプルプログラム
timer_create/timer_settime/timer_gettime/timer_delete ……新型インターバルタイマーの設定/取得をする
- timer_create/timer_settime/timer_gettime/timer_deleterのサンプルプログラム
第6章 時刻関連のシステムコール
gettimeofday/settimeofday ……時刻をマイクロ秒単位で取得/設定する
- gettimeofday/settimeofdayのサンプルプログラム
time/stime ……時刻を秒単位で取得/設定する
- time/stimeのサンプルプログラム
clock_gettime/
clock_settime/clock_getres ……時刻をナノ秒単位で取得/設定する
- clock_gettime/clock_gettime/clock_getresのサンプルプログラム
nanosleep ……ナノ秒単位でプロセスを停止する
- nanosleepのサンプルプログラム
第7章 システム属性関連のシステムコール
uname ……各種システム情報を取得する
- unameのサンプルプログラム
gethostname/sethostname ……ホスト名を取得/設定する
- gethostname/sethostnameのサンプルプログラム
getdomainname/setdomainname ……NISドメイン名を取得/設定する
- getdomainname/setdomainnameのサンプルプログラム
第8章 ネットワーク(ソケット)関連のシステムコール
socket ……通信のためのソケットを作成する
- socketのサンプルプログラム
bind ……ソケットにソケットアドレスを割り当てる
- bindのサンプルプログラム
listen ……接続型ソケットを接続待ち状態にする
- listenのサンプルプログラム
accept ……接続型ソケットへの接続を受け付ける
- acceptのサンプルプログラム
connect ……ソケットに接続する
- サンプルプログラム
recvfrom ……ソケットからデータを受信する
- recvfromのサンプルプログラム
sendto ……ソケットにデータを送信する
- sendtoのサンプルプログラム
getsockopt/setsockopt ……ソケットのオプションを取得/設定する
- getsockopt/setsockoptのサンプルプログラム
shutdown ……接続中のソケットの通信を遮断する
- shutdownのサンプルプログラム
getpeername/getsockname ……接続先または自分のソケットアドレスを取得する
- getpeername/getsocknameのサンプルプログラム
第9章 間接システムコール
syscall ……間接的にシステムコールを行う
- syscallのサンプルプログラム
socketcall ……ソケット関連のシステムコールを呼び出す[Linux特有]
- socketcallのサンプルプログラム