Chapter 3 File I/O

3.10 ファイル共有 File Sharing

あとの節 3.12 などのための前提知識.

TODO: 別途まとめたが、ここにも図を入れておく.

これらは古く, Ken Thompton 1978 Unix の初期からあるが, Linux においては vノードはなく, 汎用iノードを使っている.

Q. 2つのプロセスが独立してファイルを開いているとき、どういう図ができるか.

3.12 不可分(アトミック)操作

例1. ログファイルの追記

独立した複数のプロセスが同一ファイルへの追記をすることについて.

ファイル末尾へのシークと書き込みが, ほかのプロセスに対して不可分であること. => UNIX システムではファイルフラグ O_APPEND を指定してファイルオープンをすると保証される. => pread/pwrite 関数が定義されている.

例2. 既存のファイルのオープン

関数 open にフラグ O_CREATO_EXCL を両方指定した場合について.

Q. open と creat の間で別プロセスが当該ファイルを作成するとどうなるか.

  1. open
  2. 別プロセスが同じファイルを creat
  3. 別プロセスが同じファイルに書き込み
  4. creat

結果として, 3. の内容がなくなる

不可分操作 atomic operation とは

複数の手順からなる操作で, その操作を行う場合, すべての手順が実行されるか, どの手順も実行されないかのどちらかが保証されている必要がある.

3.13 関数 sync/fsync/fdatasync

3.14 関数 fcntl

オープンしているファイルの記述子を指定し属性の変更する

コマンド

3.15 関数 ioctl

An fcntl(2) F_SETOWN operation can be used to specify a process or process group to receive a SIGURG signal when the out-of-band data arrives or SIGPIPE signal when a SOCK_STREAM connection breaks unexpectedly. This operation may also be used to set the process or process group that receives the I/O and asynchronous notification of I/O events via SIGIO. Using F_SETOWN is equivalent to an ioctl(2) call with the FIOSETOWN or SIOCSPGRP argument.

3.16 /dev/fd