Linuxシステムコールプログラミング

[表紙]Linuxシステムコールプログラミング

紙版発売

A5判/304ページ

定価2,728円(本体2,480円+税10%)

ISBN 978-4-7741-3970-8

ただいま弊社在庫はございません。

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

本書はC言語プログラムからシステムコールを呼び出す技法について解説します。システムコールの基礎から関数の使い方,最終的にはシステムコールを利用した簡易コマンドの開発までをカバーします。

こんな方におすすめ

  • Linuxの内部で行われている処理について興味がある方
  • Linuxのシステムコールの仕組みについて知りたい方

著者の一言

OSがどのような仕組みで動いているのかを考える時,その突破口として,システムコールについて考えてみるのは,非常に有意義なことです。OSにはどのようなシステムコールがあり,それらはどのようなコマンドまたはCライブラリ関数に利用されているのか,本書はそのような興味に答えることを念頭に置いた,Linuxのシステムコールの解説書です。

本書がシステムコールの理解のお役に立てれば幸いです。

(本書前書きより抜粋)

本書のサンプル

本書の一部ページを,PDFで確認することができます。

目次

第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コマンドの作成

著者プロフィール

山森丈範(やまもりたけのり)

大学時代にUNIXを触って以来,仕事でも個人でもUNIX系OSを使用。安くなった中古のUNIXワークステーションを自宅に買い込むなどの時期を経て,今では自作PCにLinuxを入れるスタイルに落ち着いているというプログラマ。C言語,シェルスクリプト,アセンブラでのプログラムを好む。著書に「ゲームで極めるシェルスクリプトスーパーテクニック」「シェルスクリプト基本リファレンス」がある。