OSDN Git Service

(split) LDP: Update the version to 3.53 in PO files
[linuxjm/LDP_man-pages.git] / release / man2 / fcntl.2
1 .\" t
2 .\" This manpage is Copyright (C) 1992 Drew Eckhardt;
3 .\"                 and Copyright (C) 1993 Michael Haardt, Ian Jackson;
4 .\"                 and Copyright (C) 1998 Jamie Lokier;
5 .\"                 and Copyright (C) 2002-2010 Michael Kerrisk.
6 .\"
7 .\" %%%LICENSE_START(VERBATIM)
8 .\" Permission is granted to make and distribute verbatim copies of this
9 .\" manual provided the copyright notice and this permission notice are
10 .\" preserved on all copies.
11 .\"
12 .\" Permission is granted to copy and distribute modified versions of this
13 .\" manual under the conditions for verbatim copying, provided that the
14 .\" entire resulting derived work is distributed under the terms of a
15 .\" permission notice identical to this one.
16 .\"
17 .\" Since the Linux kernel and libraries are constantly changing, this
18 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
19 .\" responsibility for errors or omissions, or for damages resulting from
20 .\" the use of the information contained herein.  The author(s) may not
21 .\" have taken the same level of care in the production of this manual,
22 .\" which is licensed free of charge, as they might when working
23 .\" professionally.
24 .\"
25 .\" Formatted or processed versions of this manual, if unaccompanied by
26 .\" the source, must acknowledge the copyright and authors of this work.
27 .\" %%%LICENSE_END
28 .\"
29 .\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
30 .\" Modified 1995-09-26 by Andries Brouwer <aeb@cwi.nl>
31 .\" and again on 960413 and 980804 and 981223.
32 .\" Modified 1998-12-11 by Jamie Lokier <jamie@imbolc.ucc.ie>
33 .\" Applied correction by Christian Ehrhardt - aeb, 990712
34 .\" Modified 2002-04-23 by Michael Kerrisk <mtk.manpages@gmail.com>
35 .\"     Added note on F_SETFL and O_DIRECT
36 .\"     Complete rewrite + expansion of material on file locking
37 .\"     Incorporated description of F_NOTIFY, drawing on
38 .\"             Stephen Rothwell's notes in Documentation/dnotify.txt.
39 .\"     Added description of F_SETLEASE and F_GETLEASE
40 .\" Corrected and polished, aeb, 020527.
41 .\" Modified 2004-03-03 by Michael Kerrisk <mtk.manpages@gmail.com>
42 .\"     Modified description of file leases: fixed some errors of detail
43 .\"     Replaced the term "lease contestant" by "lease breaker"
44 .\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
45 .\"     Added notes on capability requirements
46 .\" Modified 2004-12-08, added O_NOATIME after note from Martin Pool
47 .\" 2004-12-10, mtk, noted F_GETOWN bug after suggestion from aeb.
48 .\" 2005-04-08 Jamie Lokier <jamie@shareable.org>, mtk
49 .\"     Described behavior of F_SETOWN/F_SETSIG in
50 .\"     multithreaded processes, and generally cleaned
51 .\"     up the discussion of F_SETOWN.
52 .\" 2005-05-20, Johannes Nicolai <johannes.nicolai@hpi.uni-potsdam.de>,
53 .\"     mtk: Noted F_SETOWN bug for socket file descriptor in Linux 2.4
54 .\"     and earlier.  Added text on permissions required to send signal.
55 .\" 2009-09-30, Michael Kerrisk
56 .\"     Note obsolete F_SETOWN behavior with threads.
57 .\"     Document F_SETOWN_EX and F_GETOWN_EX
58 .\" 2010-06-17, Michael Kerrisk
59 .\"     Document F_SETPIPE_SZ and F_GETPIPE_SZ.
60 .\"
61 .\"*******************************************************************
62 .\"
63 .\" This file was generated with po4a. Translate the source file.
64 .\"
65 .\"*******************************************************************
66 .TH FCNTL 2 2012\-04\-15 Linux "Linux Programmer's Manual"
67 .SH 名前
68 fcntl \- ファイルディスクリプタの操作を行う
69 .SH 書式
70 .nf
71 \fB#include <unistd.h>\fP
72 \fB#include <fcntl.h>\fP
73 .sp
74 \fBint fcntl(int \fP\fIfd\fP\fB, int \fP\fIcmd\fP\fB, ... /* \fP\fIarg\fP\fB */ );\fP
75 .fi
76 .SH 説明
77 \fBfcntl\fP()  は、オープンされたファイルディスクリプタ \fIfd\fP に関して下記の操作を行う。操作は \fIcmd\fP によって決まる:
78
79 \fBfcntl\fP() はオプションとして第三引き数をとることができる。 第三引き数が必要
80 かどうかは \fIcmd\fP により決まる。必要な引き数の型は \fIcmd\fP 名の後ろの括弧内で
81 指定されている (ほとんどの場合、必要な型は \fIint\fP であり、この引き数を表すの
82 に \fIarg\fP という名前を使っている)。引き数が必要ない場合には \fIvoid\fP が指定さ
83 れている。
84 .SS ファイルディスクリプタの複製
85 .TP 
86 \fBF_DUPFD\fP (\fIint\fP)
87 利用可能なファイルディスクリプタのうち、 \fIarg\fP 以上で最小のものを探し、 \fIfd\fP のコピーとする。これは別の形の \fBdup2\fP(2)
88 である。 \fBdup2\fP(2)  では指定されたディスクリプタが使われる点が違う。
89 .IP
90 成功すると、新しいディスクリプタが返される。
91 .IP
92 詳細は \fBdup\fP(2)  を参照のこと。
93 .TP 
94 \fBF_DUPFD_CLOEXEC\fP (\fIint\fP; Linux 2.6.24 以降)
95 \fBF_DUPFD\fP と同様だが、それに加えて複製されたディスクリプタに対して close\-on\-exec フラグをセットする。
96 このフラグを指定することで、プログラムは \fBFD_CLOEXEC\fP フラグをセットするために \fBfcntl\fP()  の \fBF_SETFD\fP
97 操作を追加で行う必要がなくなる。 このフラグがなぜ有用かについては、 \fBopen\fP(2)  の \fBO_CLOEXEC\fP の説明を参照のこと。
98 .SS ファイルディスクリプタ・フラグ
99 以下のコマンドを使って、ファイルディスクリプタに関連するフラグ を操作することができる。 現在のところ、定義されているフラグは一つだけである:
100 \fBFD_CLOEXEC\fP (close\-on\-exec フラグ)。 \fBFD_CLOEXEC\fP ビットが 0 なら、ファイルディスクリプタは
101 \fBexecve\fP(2)  を行ってもオープンされたままだが、そうでない場合はクローズされる。
102 .TP 
103 \fBF_GETFD\fP (\fIvoid\fP)
104 ファイルディスクリプタ・フラグを読み出す。 \fIarg\fP は無視される。
105 .TP 
106 \fBF_SETFD\fP (\fIint\fP)
107 ファイルディスクリプタ・フラグに \fIarg\fP で指定した値を設定する。
108 .SS ファイル状態フラグ
109 .\" or
110 .\" .BR creat (2),
111 オープンファイル記述 (open file description) には、 ファイル記述毎に設定される状態フラグがいくつかある。これらのフラグは
112 \fBopen\fP(2)  によって初期化され、 \fBfcntl\fP(2)  により変更することもできる。これらは、 (\fBdup\fP(2),
113 \fBfcntl\fP(F_DUPFD), \fBfork\fP(2)  などで) 複製されたファイルディスクリプタ同士は 同じオープンファイル記述を参照する。
114 そのため、 同じファイル状態フラグが共有される。
115
116 ファイル状態フラグとその意味は \fBopen\fP(2)  で説明されている。
117 .TP 
118 \fBF_GETFL\fP (\fIvoid\fP)
119 ファイルのアクセスモードとファイル状態フラグを取得する。
120 \fIarg\fP は無視される。
121 .TP 
122 \fBF_SETFL\fP (\fIint\fP)
123 .\" FIXME . According to POSIX.1-2001, O_SYNC should also be modifiable
124 .\" via fcntl(2), but currently Linux does not permit this
125 .\" See http://bugzilla.kernel.org/show_bug.cgi?id=5994
126 ファイル状態フラグに \fIarg\fP で指定された値を設定する。 \fIarg\fP のうち、ファイルのアクセスモード (\fBO_RDONLY\fP,
127 \fBO_WRONLY\fP, \fBO_RDWR\fP)  とファイル作成フラグ (すなわち \fBO_CREAT\fP, \fBO_EXCL\fP,
128 \fBO_NOCTTY\fP, \fBO_TRUNC\fP)  に関するビットは無視される。 Linux では、このコマンドで変更できるのは
129 \fBO_APPEND\fP, \fBO_ASYNC\fP, \fBO_DIRECT\fP, \fBO_NOATIME\fP, \fBO_NONBLOCK\fP フラグだけである。
130 .SS アドバイザリ・ロック
131 \fBF_GETLK\fP, \fBF_SETLK\fP, \fBF_SETLKW\fP は、レコード・ロックの獲得/解放/テストのために使用する
132 (レコード・ロックはファイルセグメント・ロックや ファイル領域ロックとも呼ばれる)。 三番目の引き数 \fIlock\fP
133 は、以下に示すフィールドを含む構造体へのポインタである (フィールドの順序は関係なく、構造体に他のフィールドがあってもよい)。
134 .in +4n
135 .nf
136 .sp
137 struct flock {
138     ...
139     short l_type;    /* Type of lock: F_RDLCK,
140                         F_WRLCK, F_UNLCK */
141     short l_whence;  /* How to interpret l_start:
142                         SEEK_SET, SEEK_CUR, SEEK_END */
143     off_t l_start;   /* Starting offset for lock */
144     off_t l_len;     /* Number of bytes to lock */
145     pid_t l_pid;     /* PID of process blocking our lock
146                         (F_GETLK only) */
147     ...
148 };
149 .fi
150 .in
151 .P
152 この構造体の \fIl_whence\fP, \fIl_start\fP, \fIl_len\fP フィールドで、ロックを行いたいバイト範囲を指定する。
153 ファイルの末尾より後ろのバイトをロックすることはできるが、 ファイルの先頭より前のバイトをロックすることはできない。
154
155 \fIl_start\fP はロックを行う領域の開始オフセットである。 その意味は \fIl_whence\fP により異なる: \fIl_whence\fP が
156 \fBSEEK_SET\fP の場合はファイルの先頭からのオフセット、 \fIl_whence\fP が \fBSEEK_CUR\fP
157 の場合は現在のファイルオフセットからのオフセット、 \fIl_whence\fP が \fBSEEK_END\fP
158 の場合はファイルの末尾からのオフセットと解釈される。 後ろの2つの場合には、 ファイルの先頭より前にならない範囲で、 \fIl_start\fP
159 に負の値を指定することができる。
160
161 \fIl_len\fP はロックしたいバイト数を示す。 \fIl_len\fP が正の場合、ロックされるバイト範囲は \fIl_start\fP 以上
162 \fIl_start\fP+\fIl_len\fP\-\fI1\fP 以下となる。 \fIl_len\fP に 0 を指定した場合は特別な意味を持つ: \fIl_whence\fP
163 and \fIl_start\fP で指定される位置からファイルの末尾までの全てのバイトをロックする
164 (ファイルがどんなに大きくなったとしてもファイルの末尾までロックする)。
165
166 POSIX.1\-2001 では、負の値の \fIl_len\fP をサポートする実装を認めている (必須ではない)。 \fIl_len\fP
167 が負の場合、ロックされるバイト範囲は \fIl_start\fP+\fIl_len\fP 以上 \fIl_start\fP\-1 以下となる。 この動作はカーネル
168 2.4.21 以降および 2.5.49 以降の Linux で サポートされている。
169
170 \fIl_type\fP フィールドは、ファイルに対して読み出しロック (\fBF_RDLCK\fP)  と書き込みロック (\fBF_WRLCK\fP)  のどちらを
171 設定するかを指定する。 ファイルのある領域に対して、読み出しロック (共有ロック) を保持できる プロセス数に制限はないが、書き込みロック
172 (排他ロック) を保持できる のは一つのプロセスだけである。排他ロックを設定すると、(共有ロックか 排他ロックにかかわらず)
173 他のロックは何も設定できない。 一つのプロセスは、ファイルのある領域に対して一種類のロックしか保持できない。
174 新規のロックがロックが設定されている領域に対して適用されると、既存のロック は新規のロックの種別に変換される
175 (新規のロックで指定されたバイト範囲が既存ロックの範囲と一致する場合以外では、 変換の過程で既存のロックの分割、縮小、結合が行われることがある)。
176 .TP 
177 \fBF_SETLK\fP (\fIstruct flock *\fP)
178 (\fIl_type\fP が \fBF_RDLCK\fP か \fBF_WRLCK\fP の場合は) ロックの獲得を、 (\fBF_UNLCK\fP の場合は)
179 ロックの解放を、 \fIflock\fP 構造体のフィールド \fIl_whence\fP, \fIl_start\fP, \fIl_len\fP
180 で指定された範囲のバイトに対して行う。 指定されたロックが他のプロセスが設定しているロックと衝突する場合は、 \-1 を返し、 \fIerrno\fP に
181 \fBEACCES\fP か \fBEAGAIN\fP を設定する。
182 .TP 
183 \fBF_SETLKW\fP (\fIstruct flock *\fP)
184 \fBF_SETLK\fP と同様だが、こちらではそのファイルに対して衝突するロックが 適用されていた場合に、そのロックが解放されるのを待つ点が異なる。
185 待っている間にシグナルを受けた場合は、システムコールは中断され、 (シグナルハンドラが戻った直後に) 返り値 \-1 を返す (また \fIerrno\fP に
186 \fBEINTR\fP が設定される; \fBsignal\fP(7)  参照)。
187 .TP 
188 \fBF_GETLK\fP (\fIstruct flock *\fP)
189 このコールの呼び出し時には、 \fIlock\fP にはそのファイルに適用しようとするロックに関する情報が入っている。 ロックを適用できる場合には、
190 \fBfcntl\fP()  は実際にはロックを行わず、構造体 \fIlock\fP の \fIl_type\fP フィールドに \fBF_UNLCK\fP
191 を設定し、他のフィールドは変更せずに、復帰する。 違う種別のロックが (一つもしくは複数) 適用されていて ロックを適用できないような場合には、
192 \fBfcntl\fP()  は、原因となったロックの一つについての詳細情報を構造体 \fIlock\fP のフィールド \fIl_type\fP,
193 \fIl_whence\fP, \fIl_start\fP, \fIl_len\fP に格納し、また \fIl_pid\fP にロックを保持しているプロセスの PID
194 を設定して、復帰する。
195 .P
196 読み出しロックを適用するには、 \fIfd\fP は読み出し用にオープンされていなければならない。 書き込みロックを適用するには、 \fIfd\fP
197 は書き込み用にオープンされていなければならない。 読み書き両方のロックを適用するには、読み書き両用で ファイルをオープンしなければならない。
198 .P
199 .\" (Additional file descriptors referring to the same file
200 .\" may have been obtained by calls to
201 .\" .BR open "(2), " dup "(2), " dup2 "(2), or " fcntl ().)
202 レコードのロックは、 \fBF_UNLCK\fP により明示的に削除されるだけでなく、 プロセスが終了したときや、ロックが適用されているファイルを参照している
203 ファイルディスクリプタのいずれかがクローズされた場合にも解放される。 このロックの解放は自動的に行われる。 この動作はまずい: あるプロセスが
204 \fI/etc/passwd\fP や \fI/etc/mtab\fP といったファイルにロックを適用しているときに、
205 あるライブラリ関数が何かの理由で同じファイルを open, read, close すると、そのファイルへのロックが失われることになる。
206 .P
207 レコードのロックは \fBfork\fP(2)  で作成された子プロセスには継承されないが、 \fBexecve\fP(2)  の前後では保存される。
208 .P
209 \fBstdio\fP(3)  ではバッファリングが行われるので、 stdio 関連の関数ではレコードのロックの使用は回避される; 代わりに
210 \fBread\fP(2)  や \fBwrite\fP(2)  を使用すること。
211 .SS "強制ロック (mandatory locking)"
212 上述のロックにはアドバイザリ・ロック (advisory lock) と強制ロック (mandatory lock)
213 の二種類があるが、デフォルトではアドバイザリ・ロックとなる。
214
215 アドバイザリ・ロックに強制力はなく、協調して動作するプロセス間でのみ 有効である。
216
217 強制ロックは全てのプロセスに対して効果がある。 あるプロセスが互換性のない強制ロックが適用されたファイル領域に対して (\fBread\fP(2)  や
218 \fBwrite\fP(2)  により) 互換性のないアクセスを実行しようとした場合、 アクセスの結果は そのファイルのオープンファイル記述で
219 \fBO_NONBLOCK\fP フラグが有効になっているかにより決まる。 \fBO_NONBLOCK\fP
220 フラグが有効になっていないときは、ロックが削除されるか、 ロックがアクセスと互換性のあるモードに変換されるまで、 システムコールは停止 (block)
221 される。 \fBO_NONBLOCK\fP フラグが有効になっているときは、システムコールはエラー \fBEAGAIN\fP で失敗する。
222
223 強制ロックを使用するためには、ロック対象のファイルが含まれるファイルシステム
224 と、ロック対象のファイル自身の両方について、強制ロックが有効になっていなけれ ばならない。ファイルシステムについて強制ロックを有効にするには、
225 \fBmount\fP(8)  に "\-o mand" オプションを渡すか、 \fBmount\fP(2)  に \fBMS_MANDLOCK\fP
226 フラグを指定する。ファイルについて強制ロックを有効にするには、 そのファイルのグループ実行許可 (group execute permission)
227 を無効とし、 かつ set\-group\-ID 許可ビットを有効にする (\fBchmod\fP(1)  と \fBchmod\fP(2)  を参照)。
228
229 Linux の強制ロックの実装は信頼性に欠けるものである。 下記の「バグ」の節を参照のこと。
230 .SS シグナルの管理
231 \fBF_GETOWN\fP, \fBF_SETOWN\fP, \fBF_GETOWN_EX\fP, \fBF_SETOWN_EX\fP, \fBF_GETSIG\fP,
232 \fBF_SETSIG\fP は、I/O が利用可能になったことを示すシグナルを管理するために使用される。
233 .TP 
234 \fBF_GETOWN\fP (\fIvoid\fP)
235 ファイルディスクリプタ \fIfd\fP のイベントに対するシグナル \fBSIGIO\fP および \fBSIGURG\fP を受けているプロセスのプロセスID
236 かプロセスグループを (関数の結果として) 返す。 プロセスID は正の値として返される。 プロセスグループID は負の値として返される
237 (下記のバグの章を参照)。 \fIarg\fP は無視される。
238 .TP 
239 \fBF_SETOWN\fP (\fIint\fP)
240 ファイルディスクリプタ \fIfd\fP のイベント発生を知らせるシグナル \fBSIGIO\fP や \fBSIGURG\fP を受けるプロセスの プロセス ID
241 またはプロセスグループID を \fIarg\fP で指定された ID に設定する。 プロセスID は正の値として指定し、 プロセスグループID
242 は負の値として指定する。 ほとんどの場合、呼び出し元プロセスは所有者として自分自身を指定する (つまり \fIarg\fP に \fBgetpid\fP(2)
243 を指定する)。
244
245 .\" From glibc.info:
246 \fBfcntl\fP()  の \fBF_SETFL\fP コマンドを使用してファイルディスクリプタに \fBO_ASYNC\fP
247 状態フラグを設定した場合には、そのファイルディスクリプタへの 入出力が可能になる度に \fBSIGIO\fP シグナルが送られる。 \fBF_SETSIG\fP は
248 \fBSIGIO\fP 以外の別のシグナルの配送を受けられるように するのにも使うことができる。 許可 (permission)
249 のチェックで失敗した場合には、 シグナルは黙って捨てられる。
250
251 \fBF_SETOWN\fP により指定された所有者のプロセス (またはプロセスグループ) に シグナルを送る際には、 \fBkill\fP(2)
252 に書かれているのと同じ許可のチェックが行われる。 このとき、シグナルを送信するプロセスは \fBF_SETOWN\fP を使ったプロセスである
253 (但し、下記の「バグ」の章を参照のこと)。
254
255 .\" The following appears to be rubbish.  It doesn't seem to
256 .\" be true according to the kernel source, and I can write
257 .\" a program that gets a terminal-generated SIGIO even though
258 .\" it is not the foreground process group of the terminal.
259 .\" -- MTK, 8 Apr 05
260 .\"
261 .\" If the file descriptor
262 .\" .I fd
263 .\" refers to a terminal device, then SIGIO
264 .\" signals are sent to the foreground process group of the terminal.
265 ファイルディスクリプタがソケットを参照している場合は、 \fBF_SETOWN\fP を使用して、ソケットに帯域外 (out\-of\-band)
266 データが届いた時に \fBSIGURG\fP シグナルを配送する相手を選択することもできる (\fBSIGURG\fP が送られた場合には \fBselect\fP(2)
267 がソケットが「特別な状態」にあると報告することだろう)。
268
269 バージョン 2.6.11 以前の 2.6.x カーネルでは、以下に示す動作であった。
270 .RS
271 .IP
272 .\" The relevant place in the (2.6) kernel source is the
273 .\" 'switch' in fs/fcntl.c::send_sigio_to_task() -- MTK, Apr 2005
274 .\" send_sigurg()/send_sigurg_to_task() bypasses
275 .\" kill_fasync()/send_sigio()/send_sigio_to_task()
276 .\" to directly call send_group_sig_info()
277 .\"     -- MTK, Apr 2005 (kernel 2.6.11)
278 スレッドグループをサポートしているスレッドライブラリ (例えば NPTL) を 使って動作しているマルチスレッド・プロセスで \fBF_SETSIG\fP に
279 0 以外の値を指定した場合、 \fBF_SETOWN\fP に正の値を渡すと、その意味が違ってくる: プロセス全体を示すプロセスID
280 ではなく、プロセス内の特定の スレッドを示すスレッドID と解釈される。 したがって、 \fBF_SETSIG\fP
281 を使う場合には、きちんと結果を受け取るには、 \fBF_SETOWN\fP に渡す値を \fBgetpid\fP(2)  ではなく \fBgettid\fP(2)
282 の返り値にする必要があるだろう。 (現状の Linux スレッド実装では、メイン・スレッドのスレッドID は そのスレッドのプロセスID
283 と同じである。つまり、 シグナル・スレッドのプログラムではこの場合 \fBgettid\fP(2)  と \fBgetpid\fP(2)
284 は全く同じように使うことができる。)  ただし、注意すべき点として、この段落で述べたことは、 ソケットの帯域外データが届いたときに生成される
285 \fBSIGURG\fP シグナルにはあてはまらない。 このシグナルは常にプロセスかプロセスグループに送られ、 送信先は \fBF_SETOWN\fP
286 に渡された値にしたがって決められる。
287 .RE
288 .IP
289 上記の動作は、Linux 2.6.12 で図らずも削除され、 元に戻されない予定である。 Linux 2.6.32 以降で、特定のスレッド宛にシグナル
290 \fBSIGIO\fP と \fBSIGURG\fP を送るには \fBF_SETOWN_EX\fP を使うこと。
291 .TP 
292 \fBF_GETOWN_EX\fP (struct f_owner_ex *) (Linux 2.6.32 以降)
293 直前の \fBF_SETOWN_EX\fP 操作で定義された現在のファイルディスクリプタの所有者設定 を返す。情報は \fIarg\fP
294 が指す構造体に格納されて返される。構造体は以下の通りである。
295 .nf
296 .in +4n
297
298 struct f_owner_ex {
299     int   type;
300     pid_t pid;
301 };
302
303 .in
304 .fi
305 \fItype\fP フィールドは、 \fBF_OWNER_TID ,\fP \fBF_OWNER_PID ,\fP \fBF_OWNER_PGRP\fP
306 のいずれか一つの値となる。 \fIpid\fP フィールドは、スレッド ID、プロセス ID、プロセスグループ ID を 表す正の整数である。詳細は
307 \fBF_SETOWN_EX\fP を参照。
308 .TP 
309 \fBF_SETOWN_EX\fP (struct f_owner_ex *) (Linux 2.6.32 以降)
310 この操作は \fBF_SETOWN\fP と同様の処理を行う。 この操作を使うと、I/O が利用可能になったことを示すシグナルを、
311 特定のスレッド、プロセス、プロセスグループに送ることができる ようになる。 呼び出し元は、 \fIarg\fP 経由でシグナルの配送先を指定する。
312 \fIarg\fP は \fIf_owner_ex\fP 構造体へのポインタである。 \fItype\fP フィールドは以下のいずれかの値を取り、 この値により
313 \fIpid\fP がどのように解釈されるかが規定される。
314 .RS
315 .TP 
316 \fBF_OWNER_TID\fP
317 スレッド ID が \fIpid\fP で指定された値のスレッドにそのシグナルを送る (スレッド ID は \fBclone\fP(2)  や
318 \fBgettid\fP(2)  の呼び出しで返される値である)。
319 .TP 
320 \fBF_OWNER_PID\fP
321 ID が \fIpid\fP で指定された値のプロセスにそのシグナルを送る。
322 .TP 
323 \fBF_OWNER_PGRP\fP
324 ID が \fIpid\fP で指定された値のプロセスグループにそのシグナルを送る。 (\fBF_SETOWN\fP と異なり、プロセスグループ ID
325 には正の値を指定する点に注意すること。)
326 .RE
327 .TP 
328 \fBF_GETSIG\fP (\fIvoid\fP)
329 入力や出力が可能になった場合に送るシグナルを (関数の結果として) 返す。 値ゼロは \fBSIGIO\fP を送ることを意味する。 (\fBSIGIO\fP
330 を含む) 他の値はいずれも、 \fBSIGIO\fP の代わりに送るシグナル番号を表す。 後者の場合、シグナルハンドラを \fBSA_SIGINFO\fP
331 フラグ付きで設定すれば、ハンドラで追加の情報を得ることができる。 \fIarg\fP は無視される。
332 .TP 
333 \fBF_SETSIG\fP (\fIint\fP)
334 .\"
335 .\" The following was true only up until 2.6.11:
336 .\"
337 .\" Additionally, passing a nonzero value to
338 .\" .B F_SETSIG
339 .\" changes the signal recipient from a whole process to a specific thread
340 .\" within a process.
341 .\" See the description of
342 .\" .B F_SETOWN
343 .\" for more details.
344 入力や出力が可能になった場合に送るシグナルを \fIarg\fP に指定された値に設定する。 値ゼロは \fBSIGIO\fP を送ることを意味する。
345 (\fBSIGIO\fP を含む) 他の値はいずれも、 \fBSIGIO\fP の代わりに送るシグナル番号を表す。 後者の場合、シグナルハンドラを
346 \fBSA_SIGINFO\fP フラグ付きで設定すれば、 ハンドラで追加の情報を得ることができる。
347
348 \fBF_SETSIG\fP にゼロ以外の値を設定し、シグナルハンドラに \fBSA_SIGINFO\fP フラグを設定すると、 (\fBsigaction\fP(2)
349 を参照) I/O イベントに関する追加の情報が \fIsiginfo_t\fP 構造体でシグナルハンドラへ渡される。 \fIsi_code\fP
350 フィールドが示すシグナルの原因が \fBSI_SIGIO\fP である場合、 \fIsi_fd\fP
351 フィールドにはイベントに対応するファイルディスクリプタが入っている。 それ以外の場合は、どのファイルディスクリプタが利用可能かを示す情報は
352 ないので、どのファイルディスクリプタで I/O が可能かを判断するためには 通常の機構 (\fBselect\fP(2), \fBpoll\fP(2),
353 \fBO_NONBLOCK\fP を設定した \fBread\fP(2)  など) を使用しなければならない。
354
355 リアルタイムシグナル (値が \fBSIGRTMIN\fP 以上) を選択している場合は、 同じシグナル番号を持つ複数の I/O
356 イベントがキューに入ることがある (キューに入れるかどうかは利用可能なメモリに依存している)。 上記と同様、 \fBSA_SIGINFO\fP
357 が設定されている場合、シグナルハンドラのための追加の情報が得られる。
358
359 .\" See fs/fcntl.c::send_sigio_to_task() (2.4/2.6) sources -- MTK, Apr 05
360 以下の点に注意すること。 Linux では一つのプロセスに対してキューに入れられるリアルタイム シグナルの数に上限が設けられており
361 (\fBgetrlimit\fP(2)  と \fBsignal\fP(7)  を参照)、この上限に達するとカーネルは \fBSIGIO\fP シグナルを配送する。この
362 \fBSIGIO\fP シグナルは、指定されたスレッドではなくプロセス全体に送られる。
363 .PP
364 これらの機構を使用することで、ほとんどの場合で \fBselect\fP(2)  や \fBpoll\fP(2)  を使用せずに完全な非同期 I/O
365 を実装することができる。
366 .PP
367 \fBO_ASYNC\fP, \fBF_GETOWN\fP, \fBF_SETOWN\fP の使用は BSD と Linux に特有である。
368 \fBF_GETOWN_EX\fP, \fBF_SETOWN_EX\fP, \fBF_GETSIG\fP, \fBF_SETSIG\fP は Linux 固有である。POSIX
369 には、同様のことを行うために、非同期 I/O と \fIaio_sigevent\fP 構造体がある。Linux では、GNU C ライブラリ (Glibc)
370 の一部として これらも利用可能である。
371 .SS "リース (leases)"
372 (Linix 2.4 以降で利用可能)  \fBF_SETLEASE\fP は、 \fIfd\fP
373 が参照するオープンファイル記述に対して新しいリースを設定するのに使用される。 \fBF_GETLEASE\fP は、 \fIfd\fP
374 が参照するオープンファイル記述に対して設定されている 現在のリースを取得するのに使用される。 ファイルのリースにより、 あるプロセス ("lease
375 breaker") がそのファイルディスクリプタが参照 しているファイルに対して \fBopen\fP(2)  や \fBtruncate\fP(2)
376 を行おうとした際に、リースを保持しているプロセス ("lease holder") へ (シグナルの配送による) 通知が行われるという機構が提供される。
377 .TP 
378 \fBF_SETLEASE\fP (\fIint\fP)
379 \fIarg\fP の内容に基いてファイルのリースの設定、削除を行う。整数 \fIarg\fP には以下の値が指定できる:
380 .RS
381 .TP 
382 \fBF_RDLCK\fP
383 .\" The following became true in kernel 2.6.10:
384 .\" See the man-pages-2.09 Changelog for further info.
385 読み出しリースを取得する。これにより、 そのファイルが書き込み用にオープンされたり、ファイルが切り詰められた場合に、
386 呼び出し元のプロセスに通知が行われるようになる。 読み出しリースを設定できるのは、読み出し専用でオープンされている
387 ファイルディスクリプタに対してのみである。
388 .TP 
389 \fBF_WRLCK\fP
390 書き込みリースを取得する。これにより、 (読み出し用か書き込み用にかかわらず) そのファイルがオープンされたり、
391 ファイルが切り詰められた場合に、呼び出し元のプロセスに通知が行われるようになる。
392 書き込みリースは、そのファイルに対するオープンされたファイルディスクリプタが 他にない場合にのみ設定できる。
393 .TP 
394 \fBF_UNLCK\fP
395 そのファイルからリースを削除する。
396 .RE
397 .P
398 リースはオープンファイル記述に対して関連付けられる (\fBopen\fP(2)  参照)。 つまり、 (\fBfork\fP(2)  や \fBdup\fP(2)
399 などにより作成された) ファイルディスクリプタの複製は同じリースを参照し、 複製も含めたどのファイルディスクリプタを使ってもこのリースを変更したり
400 解放したりできる。 また、これらのファイルディスクリプタのいずれかに対して \fBF_UNLCK\fP
401 操作が明示的に実行された場合や、すべてのファイルディスクリプタが 閉じられた場合にも、リースは解放される。
402 .P
403 リースの取得は通常のファイル (regular file) に対してのみ可能である。 非特権プロセスがリースを取得できるのは、UID (所有者)
404 がプロセスの ファイルシステム UID と一致するファイルに対してだけである。 \fBCAP_LEASE\fP
405 ケーパビリティを持つプロセスは任意のファイルに対してリースを取得できる。
406 .TP 
407 \fBF_GETLEASE\fP (\fIvoid\fP)
408 ファイルディスクリプタ \fIfd\fP に対して設定されているリースの種別を取得する。 \fBF_RDLCK\fP, \fBF_WRLCK\fP, \fBF_UNLCK\fP
409 のいずれかが返される。 \fBF_RDLCK\fP, \fBF_WRLCK\fP はそれぞれ、読み出しリース、書き込みリースが設定されていることを示し、
410 \fBF_UNLCK\fP はリースが何も設定されていないことを示す。 \fIarg\fP は無視される。
411 .PP
412 あるプロセス ("lease breaker") が \fBF_SETLEASE\fP で設定されたリースと矛
413 盾するような \fBopen\fP(2) や \fBtruncate\fP(2) を実行した場合、 そのシステム
414 コールはカーネルによって停止され、 カーネルは lease holder にシグナル
415 (デフォルトでは \fBSIGIO\fP) を送って通知を行う。 lease holder はこのシグ
416 ナルを受信したときにはきちんと対応すべきである。 具体的には、別のプロセ
417 スがそのファイルにアクセスするための準備として 必要な後片付け (例えば、
418 キャッシュされたバッファのフラッシュ) を すべて行ってから、そのファイル
419 のリースの削除または格下げを行う。リースを削除をするには、 \fIarg\fP に
420 \fBF_UNLCK\fP を指定して \fBF_SETLEASE\fP を実行する。lease holder がファイル
421 に書き込みリースを保持していて、 lease breaker が読み出し用にそのファイ
422 ルをオープンしている場合、 lease holder が保持しているリースを読み出し
423 リースに格下げすれば 十分である。これをするには、 \fIarg\fP に \fBF_RDLCK\fP
424 を指定して \fBF_SETLEASE\fP を実行する。
425
426 lease holder が \fI/proc/sys/fs/lease\-break\-time\fP
427 で指定された秒数以内にリースの格下げか削除を行えなかった場合、 カーネルは強制的にその lease holder のリースを削除もしくは格下げを行う。
428
429 いったん lease break が開始されると、 lease holder が自発的にそのリース
430 の格下げか削除を行うか、lease break timer の満了後にカーネルが強制的に
431 リースの格下げか削除を行うまで、 \fBF_GETLEASE\fP は対象となるリースの型を
432 返す (リースの型は \fBF_RDLCK\fP か \fBF_UNLCK\fP のどちらであり、lease
433 breaker と互換性のある型となる)。
434
435 一度リースの削除か格下げが自発的もしくは強制的に行われると、 lease breaker がまだシステムコールを再開していない場合には、 カーネルが
436 lease breaker のシステムコールの続行を許可する。
437
438 lease breaker が実行した \fBopen\fP(2)  や \fBtruncate\fP(2)  が停止中にシグナルハンドラにより中断された場合、
439 そのシステムコールは \fBEINTR\fP エラーで失敗するが、上で述べた他の処理は そのまま行われる。 \fBopen\fP(2)  や
440 \fBtruncate\fP(2)  が停止中に lease breaker がシグナルにより kill された場合、 上で述べた他の処理はそのまま行われる。
441 lease breaker が \fBopen\fP(2)  を呼ぶ際に \fBO_NONBLOCK\fP フラグを指定した場合、そのシステムコールは
442 \fBEWOULDBLOCK\fP エラーで直ちに失敗するが、上で述べた他の処理はそのまま行われる。
443
444 lease holder への通知に使われるデフォルトのシグナルは \fBSIGIO\fP だが、 \fBfcntl\fP()  の \fBF_SETSIG\fP
445 コマンドで変更することができる。 \fBF_SETSIG\fP コマンドが実行され (\fBSIGIO\fP を指定された場合も含む)、 \fBSA_SIGINFO\fP
446 フラグ付きでシグナルハンドラが設定されている場合には、 ハンドラの第二引き数として \fIsiginfo_t\fP 構造体が渡され、この引き数の
447 \fIsi_fd\fP フィールドには別のプロセスがアクセスしたリース設定済みファイルの ディスクリプタが入っている
448 (この機能は複数のファイルに対してリースを設定する場合に有用である)。
449 .SS "ファイルやディレクトリの変更の通知 (dnotify)"
450 .TP 
451 \fBF_NOTIFY\fP (\fIint\fP)
452 (Linux 2.4 以降)  \fIfd\fP で参照されるディレクトリか、その中にあるファイルに変更があった場合に 通知を行う。どのイベントを通知するかは
453 \fIarg\fP で指定する。 \fIarg\fP はビットマスクで、以下のビットの 0個以上の論理和をとったものを指定する。
454 .RS
455 .sp
456 .PD 0
457 .TP  12
458 \fBDN_ACCESS\fP
459 ファイルへのアクセスがあった (read, pread, readv)
460 .TP 
461 \fBDN_MODIFY\fP
462 ファイルの内容が変更された (write, pwrite, writev, truncate, ftruncate).
463 .TP 
464 \fBDN_CREATE\fP
465 ファイルが作成された (open, creat, mknod, mkdir, link, symlink, rename).
466 .TP 
467 \fBDN_DELETE\fP
468 ファイルが削除 (unlink) された (unlink, 別のディレクトリへの rename, rmdir)
469 .TP 
470 \fBDN_RENAME\fP
471 ディレクトリ内でのファイル名の変更があった (rename)
472 .TP 
473 \fBDN_ATTRIB\fP
474 ファイル属性が変更された (chown, chmod, utime[s])
475 .PD
476 .RE
477 .IP
478 (上記の定義を利用するには、\fIどの\fP ヘッダファイルをインクルードするより前に、
479 \fB_GNU_SOURCE\fP 機能検査マクロを定義しなければならない。)
480
481 ディレクトリの変更通知は通常「一回限り (one\-shot)」であり、 アプリケーション側でその後さらに通知を受信したい場合は
482 再登録しなければならない。 \fIarg\fP に \fBDN_MULTISHOT\fP が含まれていた場合には、
483 変更通知は明示的に解除されるまで有効状態が継続する。
484
485 .\" The following does seem a poor API-design choice...
486 \fBF_NOTIFY\fP 要求は積算されていく。つまり、 \fIarg\fP で指定されたイベントがすでにモニタされている イベント集合に加算される形になる。
487 すべてのイベントの通知を無効にするには、 \fIarg\fP に 0 を指定して \fBF_NOTIFY\fP を呼び出す必要がある。
488
489 通知はシグナルの配送で行われる。 デフォルトのシグナルは \fBSIGIO\fP だが、 \fBfcntl\fP()  の \fBF_SETSIG\fP
490 コマンドで変更することができる。 後者の場合には、 (\fBSA_SIGINFO\fP フラグ付きでシグナルハンドラが設定されている場合には)
491 ハンドラの第二引き数として \fIsiginfo_t\fP 構造体が渡され、この構造体の \fIsi_fd\fP
492 フィールドには通知の行われたファイルディスクリプタが入っている (この機能は複数のディレクトリに対して通知を設定する場合に有用である)。
493
494 特に \fBDN_MULTISHOT\fP を使う場合は、通知にはリアルタイムシグナルを使うべきである。
495 それは、リアルタイムシグナルを使うことで、複数の通知をキューに入れる ことができるからである。
496
497 \fB注意:\fP 新しくアプリケーションを書く際には、(カーネル 2.6.13 以降で利用可能となった)  \fIinotify\fP
498 インタフェースを使用すべきである。 \fIinotify\fP はファイルシステムイベントの通知を取得するための ずっと優れたインタフェースである。
499 \fBinotify\fP(7)  を参照。
500 .SS パイプの容量の変更
501 .TP 
502 \fBF_SETPIPE_SZ\fP (\fIint\fP; Linux 2.6.35 以降)
503 \fIfd\fP が参照するパイプの容量を少なくとも \fIarg\fP バイトに変更する。
504 非特権プロセスは、パイプの容量として、
505 システムのページサイズと \fI/proc/sys/fs/pipe\-max\-size\fP で定義される
506 上限値 (\fBproc\fP(5) 参照) の間の任意の値を設定できる。
507 パイプの容量をページサイズよりも小さな値に設定しようとした場合は、
508 暗黙のうちにページサイズに切り上げられる。
509 非特権プロセスがパイプの容量を \fI/proc/sys/fs/pipe\-max\-size\fP で定義
510 された上限より大きな値に設定しようとした場合は、エラー \fBEPERM\fP が
511 発生する。特権プロセス (\fBCAP_SYS_RESOURCE\fP ケーパビリティを持つ
512 プロセス) はこの上限を上書きできる。
513 パイプにバッファを割り当てる場合、実装側の都合に応じて、
514 カーネルは \fIarg\fP よりも大きな容量を割り当ててもよい。
515 \fBF_GETPIPE_SZ\fP 操作では実際に使用されている大きさが返される。
516 パイプの容量を現在データを格納するのに使用されているバッファの
517 サイズよりも小さくしようとした場合は、エラー \fBEBUSY\fP が発生する。
518 .TP 
519 \fBF_GETPIPE_SZ\fP (\fIvoid\fP; Linux 2.6.35 以降)
520 \fIfd\fP が参照するパイプの容量を (関数の結果として) 返す。
521 .SH 返り値
522 成功した場合の返り値は操作の種類により違う:
523 .TP  0.9i
524 \fBF_DUPFD\fP
525 新しいディスクリプタを返す。
526 .TP 
527 \fBF_GETFD\fP
528 ファイルディスクリプタ・フラグの値
529 .TP 
530 \fBF_GETFL\fP
531 ファイル状態フラグの値
532 .TP 
533 \fBF_GETLEASE\fP
534 ファイルディスクリプタに対して保持されているリースの種別を返す。
535 .TP 
536 \fBF_GETOWN\fP
537 ディスクリプタの所有者を返す。
538 .TP 
539 \fBF_GETSIG\fP
540 読み込みや書き出しが可能になった時に送られるシグナルの値、もしくは 伝統的な \fBSIGIO\fP 動作の場合にはゼロを返す。
541 .TP 
542 \fBF_GETPIPE_SZ\fP
543 パイプの容量。
544 .TP 
545 他の全てのコマンド
546 0 を返す。
547 .PP
548 エラーの時は \-1 が返され、 \fIerrno\fP に適切な値が設定される。
549 .SH エラー
550 .TP 
551 \fBEACCES\fP か \fBEAGAIN\fP
552 他のプロセスが保持しているロックによって操作が禁止されている。
553 .TP 
554 \fBEAGAIN\fP
555 そのファイルは他のプロセスによってメモリ・マップされているため、 操作が禁止されている。
556 .TP 
557 \fBEBADF\fP
558 \fIfd\fP がオープンされたファイルディスクリプタでない。 あるいはコマンドが \fBF_SETLK\fP または \fBF_SETLKW\fP
559 だったが、対象のファイルディスクリプタのオープンモードが 必要となるロックの型にマッチしていない。
560 .TP 
561 \fBEDEADLK\fP
562 指定された \fBF_SETLKW\fP コマンドを実行した場合にはデッドロックになることが検出された。
563 .TP 
564 \fBEFAULT\fP
565 \fIlock\fP が利用可能なアドレス空間の外部にある。
566 .TP 
567 \fBEINTR\fP
568 \fBF_SETLKW\fP コマンドがシグナルにより割り込まれた (\fBsignal\fP(7)  参照)。 \fBF_GETLK\fP と \fBF_SETLK\fP
569 の場合、ロックを確認したり取得したりする前にシグナルによって割り込まれた。 これはたいていリモートのファイルをロックする場合 (例えば NFS
570 上でロックする場合) に起こる。 しかしローカルでも起こる場合がある。
571 .TP 
572 \fBEINVAL\fP
573 \fBF_DUPFD\fPで、 \fIarg\fP が負か、もしくは許される最大値よりも大きい。 \fBF_SETSIG\fP の場合、 \fIarg\fP
574 が利用可能なシグナル番号ではない。
575 .TP 
576 \fBEMFILE\fP
577 \fBF_DUPFD\fPで、 プロセスがすでに最大数までファイルディスクリプタをオープンしている。
578 .TP 
579 \fBENOLCK\fP
580 オープンされているロックの数が多過ぎて、ロック・テーブルがいっぱいである。 または remote locking protocol (例えば NFS
581 上のロック) が失敗した。
582 .TP 
583 \fBEPERM\fP
584 追加専用属性が設定されたファイルの \fBO_APPEND\fP フラグをクリアしようと試みた。
585 .SH 準拠
586 SVr4, 4.3BSD, POSIX.1\-2001.  POSIX.1\-2001 で規定されている操作は、
587 \fBF_DUPFD\fP, \fBF_GETFD\fP, \fBF_SETFD\fP, \fBF_GETFL\fP, \fBF_SETFL\fP,
588 \fBF_GETLK\fP, \fBF_SETLK\fP, \fBF_SETLKW\fP だけである。
589
590 \fBF_GETOWN\fP と \fBF_SETOWN\fP は POSIX.1\-2001 で規定されている。
591 (これら定義するには、 \fBBSD_SOURCE\fP を定義するか、
592 \fB_XOPEN_SOURCE\fP を 500 以上の値で定義するか、
593 \fB_POSIX_C_SOURCE\fP を 200809L 以上の値で定義すること。)
594
595 \fBF_DUPFD_CLOEXEC\fP は POSIX.1\-2008 で規定されている。
596 (これら定義するには、
597 \fB_POSIX_C_SOURCE\fP を 200809L 以上の値で定義するか、
598 \fB_XOPEN_SOURCE\fP を 700 以上の値で定義すること。)
599
600 .\" .PP
601 .\" SVr4 documents additional EIO, ENOLINK and EOVERFLOW error conditions.
602 \fBF_GETOWN_EX\fP, \fBF_SETOWN_EX\fP, \fBF_SETPIPE_SZ\fP, \fBF_GETPIPE_SZ\fP,
603 \fBF_GETSIG\fP,
604 \fBF_SETSIG\fP, \fBF_NOTIFY\fP, \fBF_GETLEASE\fP, \fBF_SETLEASE\fP は Linux 固有である
605 (これらの定義を有効にするには \fB_GNU_SOURCE\fP マクロを定義すること)。
606 .SH 注意
607 元々の Linux の \fBfcntl\fP() システムコールは (\fIflock\fP 構造体で) 大きな
608 ファイルオフセットを扱えるように設計されていなかった。
609 その結果、Linux 2.4 で \fBfcntl64\fP() システムコールが追加された。
610 この新しいシステムコールは、ファイルのロックに \fIflock64\fP という別の
611 構造体を利用し、これに対応するコマンドとして \fBF_GETLK64\fP,
612 \fBF_SETLK64\fP, \fBF_SETLKW64\fP を使用する。
613 しかし、 glibc を使うアプリケーションではこれらの詳細を無視することが
614 できる。 glibc の \fBfcntl\fP のラッパー関数は新しいシステムコールが
615 利用できる場合はそれを利用するようになっているからである。
616
617 エラーの際の返り値が \fBdup2\fP(2)  と \fBF_DUPFD\fP では異なっている。
618
619 カーネル 2.0 以降では、 \fBflock\fP(2)  と \fBfcntl\fP()  が設定するロック種別の間に相互作用はない。
620
621 .\" e.g., Solaris 8 documents this field in fcntl(2), and Irix 6.5
622 .\" documents it in fcntl(5).  mtk, May 2007
623 システムによっては、 \fIstruct flock\fP に上記以外のフィールドがあるものもある (例えば \fIl_sysid\fP)。
624 はっきりと言えることは、ロックを保持しているプロセスが別のマシンに存在 する場合には、 \fIl_pid\fP
625 だけはあまり役にたたないだろうということである。
626 .SH バグ
627 .\" glibc source: sysdeps/unix/sysv/linux/i386/sysdep.h
628 .\" mtk, Dec 04: some limited testing on alpha and ia64 seems to
629 .\" indicate that ANY negative PGID value will cause F_GETOWN
630 .\" to misinterpret the return as an error. Some other architectures
631 .\" seem to have the same range check as i386.
632 いくつかのアーキテクチャ (特に i386) における Linux システムコールの慣習
633 のため以下の制限が存在する。
634 \fBF_GETOWN\fP が返す (負の) プロセスグループID が \-1 から \-4095 の範囲に入った場合、
635 glibc はこの返り値をシステムコールでエラーが起こったと間違って解釈してしまう。
636 つまり、 \fBfcntl\fP() の返り値は \-1 となり、 \fIerrno\fP には (正の) プロセスグループID
637 が設定されることになる。Linux 固有の \fBF_GETOWN_EX\fP ではこの問題を回避できる。
638 glibc バージョン 2.11 以降では、glibc では \fBF_GETOWN_EX\fP を使って
639 \fBF_GETOWN\fP を実装することで、カーネルの \fBF_GETOWN\fP の問題を見えないようにしている。
640
641 Linux 2.4 以前では、非特権プロセスが \fBF_SETOWN\fP を使って、ソケットのファイルディスクリプタの所有者に 呼び出し元以外のプロセス
642 (やプロセスグループ) を指定すると 発生するバグがある。この場合、 呼び出し元が所有者として指定したプロセス (やプロセスグループ) に
643 シグナルを送る許可を持っていたとしても、 \fBfcntl\fP()  が \-1 を返し \fIerrno\fP に \fBEPERM\fP を設定することがある。
644 このエラーが返ったにもかかわらず、ファイルディスクリプタの所有者 は設定され、シグナルはその所有者に送られる。
645
646 .\" http://marc.info/?l=linux-kernel&m=119013491707153&w=2
647 これまでの Linux の全てのバージョンにおける強制ロックの実装は、 競合条件下で強制ロックが不完全になるような場合がある。
648 ロックと重なって実行された \fBwrite\fP(2)  の呼び出しは強制ロックが獲得された後にもデータを変更することができる。 ロックと重なって実行された
649 \fBread\fP(2)  の呼び出しは強制ロックが獲得された後になって行われたデータの変更を 検出することができる。 同様の競合条件が強制ロックと
650 \fBmmap\fP(2)  の間にも存在する。それゆえ、強制ロックに頼るのはお薦めできない。
651 .SH 関連項目
652 \fBdup2\fP(2), \fBflock\fP(2), \fBopen\fP(2), \fBsocket\fP(2), \fBlockf\fP(3),
653 \fBcapabilities\fP(7), \fBfeature_test_macros\fP(7)
654
655 Linux カーネルソースの \fIDocumentation/filesystems/\fP ディレクトリ内の \fIlocks.txt\fP,
656 \fImandatory\-locking.txt\fP, \fIdnotify.txt\fP (以前のカーネルでは、これらのファイルは
657 \fIDocumentation/\fP ディレクトリ直下にあり、 \fImandatory\-locking.txt\fP は \fImandatory.txt\fP
658 という名前であった)
659 .SH この文書について
660 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部
661 である。プロジェクトの説明とバグ報告に関する情報は
662 http://www.kernel.org/doc/man\-pages/ に書かれている。