WEB+DB PRESS plusシリーズLinuxシステムコール基本リファレンス
――OSを知る突破口
――
2018年2月10日紙版発売
2018年2月10日電子版発売
山森丈範 著
A5判/352ページ
定価3,168円(本体2,880円+税10%)
ISBN 978-4-7741-9555-1
ただいま弊社在庫はございません。
書籍の概要
この本の概要
システムコールの基本にスポットを当てた初学者向けのリファレンス。LinuxをはじめとしたUnix系OSにおいて,カーネルとプログラム/プロセスの間に位置するシステムコールはAPIという性質上,互換性を保ちつつ着実に進化する部分で,プログラマにとって長く役立つ技術知識です。本書では,Cライブラリ関数やカーネルとの関係などの基礎の基礎も押さえつつ,64bit版をメインに定番および今どきのシステムコールを厳選収録。Linux/FreeBSD/Solaris互換の実機で試せるサンプルコードを満載し,現場で使える1冊をお届けします。
こんな方におすすめ
- Unix系OSのシステムコールについて学びたい方
- サンプルコードを通じてシステムコールの動作を確認してみたい方
- OSがどのような仕組みで動いているかにご興味のある方
補足
本書で前提とする基礎知識について
本書では,Linux,FreeBSDまたはSolarisを使用し,C言語のコンパイルができる方々を想定し,解説を行っています。
本書の動作確認環境
本書では,以下のそれぞれ64bitと32bit両方で動作確認を行いました。
- Fedora 27
- FreeBSD 11.1-RELEASE
- Solaris 11
上記と異なる環境においては,本書での説明内容や動作等が異なる場合があります。
本書に関するお知らせ
本書に関連する記事を公開しております。
この書籍に関連する記事があります!
- 本書について
- OSがどのような仕組みで動いているのかを考えるとき,その突破口として,システムコールについて考えてみるのは非常に有意義なことです。
- システムコールのちょっと深い(!?)基本―OSとユーザプログラムの実行が見えてくる
- システムコール(system call)は,OS(カーネル)の持つ機能にアクセスする時に使われるしくみです。
目次
第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のサンプルプログラム
第10章 [システムコールで作る]簡易版UNIXコマンド
簡易echoコマンドの作成
簡易catコマンドの作成
簡易catコマンドの改良
簡易cpコマンドの作成
簡易cp -pコマンドの作成
簡易lnコマンドの作成
簡易mkdirコマンドの作成
簡易rm/rmdirコマンドの作成
簡易touchコマンドの作成
簡易whoamiコマンドの作成
簡易sleepコマンドの作成[nanosleep版]
簡易sleepコマンドの作成[select版]
簡易niceコマンドの作成
簡易timeコマンドの作成
簡易unameコマンドの作成
簡易netcatコマンドの作成
この本に関連する書籍
-
Fluentd実践入門 ──統合ログ基盤のためのデータ収集ツール
本書は,Fluentdについて網羅的に解説した書籍です。 Fluentdは,ログやそのほかのデータの収集および集約,転送,変換,保存を実現するためのソフトウェアです。す...
-
Linux+コマンド入門 ——シェルとコマンドライン、基本の力
Linuxの基本&コマンドの作法をまとめた入門書。巻頭&巻末には,基本コマンドのQuickリファレンスを特別収録。 本書では,Linuxシステムの「今の基本」を押さえつつ,...
-
[改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる
定番の1冊『シェルスクリプト基本リファレンス』の改訂第3版。シェルスクリプトの知識は,プログラマにとって長く役立つ知識です。本書では,複数のプラットフォームに...