OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / release / man2 / open.2
1 .\" Hey Emacs! This file is -*- nroff -*- source.
2 .\"
3 .\" This manpage is Copyright (C) 1992 Drew Eckhardt;
4 .\"                               1993 Michael Haardt, Ian Jackson.
5 .\"                               2008 Greg Banks
6 .\"
7 .\" Permission is granted to make and distribute verbatim copies of this
8 .\" manual provided the copyright notice and this permission notice are
9 .\" preserved on all copies.
10 .\"
11 .\" Permission is granted to copy and distribute modified versions of this
12 .\" manual under the conditions for verbatim copying, provided that the
13 .\" entire resulting derived work is distributed under the terms of a
14 .\" permission notice identical to this one.
15 .\"
16 .\" Since the Linux kernel and libraries are constantly changing, this
17 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
18 .\" responsibility for errors or omissions, or for damages resulting from
19 .\" the use of the information contained herein.  The author(s) may not
20 .\" have taken the same level of care in the production of this manual,
21 .\" which is licensed free of charge, as they might when working
22 .\" professionally.
23 .\"
24 .\" Formatted or processed versions of this manual, if unaccompanied by
25 .\" the source, must acknowledge the copyright and authors of this work.
26 .\"
27 .\" Modified 1993-07-21 by Rik Faith <faith@cs.unc.edu>
28 .\" Modified 1994-08-21 by Michael Haardt
29 .\" Modified 1996-04-13 by Andries Brouwer <aeb@cwi.nl>
30 .\" Modified 1996-05-13 by Thomas Koenig
31 .\" Modified 1996-12-20 by Michael Haardt
32 .\" Modified 1999-02-19 by Andries Brouwer <aeb@cwi.nl>
33 .\" Modified 1998-11-28 by Joseph S. Myers <jsm28@hermes.cam.ac.uk>
34 .\" Modified 1999-06-03 by Michael Haardt
35 .\" Modified 2002-05-07 by Michael Kerrisk <mtk.manpages@gmail.com>
36 .\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
37 .\" 2004-12-08, mtk, reordered flags list alphabetically
38 .\" 2004-12-08, Martin Pool <mbp@sourcefrog.net> (& mtk), added O_NOATIME
39 .\" 2007-09-18, mtk, Added description of O_CLOEXEC + other minor edits
40 .\" 2008-01-03, mtk, with input from Trond Myklebust
41 .\"     <trond.myklebust@fys.uio.no> and Timo Sirainen <tss@iki.fi>
42 .\"     Rewrite description of O_EXCL.
43 .\" 2008-01-11, Greg Banks <gnb@melbourne.sgi.com>: add more detail
44 .\"     on O_DIRECT.
45 .\" 2008-02-26, Michael Haardt: Reorganized text for O_CREAT and mode
46 .\"
47 .\" FIXME . Apr 08: The next POSIX revision has O_EXEC, O_SEARCH, and
48 .\" O_TTYINIT.  Eventually these may need to be documented.  --mtk
49 .\" FIXME Linux 2.6.33 has O_DSYNC, and a hidden __O_SYNC.
50 .\"
51 .\" Japanese Version Copyright (c) 1997-1999 HANATAKA Shinya
52 .\"         all rights reserved.
53 .\" Translated 1999-08-14, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
54 .\" Updated 2001-05-25, Yuichi SATO <ysato444@yahoo.co.jp>
55 .\" Updated & Modified 2002-01-02, Yuichi SATO
56 .\" Updated & Modified 2002-07-07, Yuichi SATO
57 .\" Updated & Modified 2002-09-19, Yuichi SATO
58 .\" Updated & Modified 2003-07-30, Yuichi SATO
59 .\" Updated & Modified 2003-11-27, Yuichi SATO
60 .\" Updated & Modified 2005-01-01, Yuichi SATO
61 .\" Updated & Modified 2005-09-14, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
62 .\" Updated & Modified 2005-10-14, Akihiro MOTOKI
63 .\" Updated & Modified 2006-01-18, Akihiro MOTOKI
64 .\" Updated & Modified 2006-04-15, Akihiro MOTOKI, LDP v2.29
65 .\" Updated 2007-01-07, Akihiro MOTOKI, LDP v2.43
66 .\" Updated 2007-05-01, Akihiro MOTOKI, LDP v2.46
67 .\" Updated 2007-10-12, Akihiro MOTOKI, LDP v2.66
68 .\" Updated 2008-02-12, Akihiro MOTOKI, LDP v2.77
69 .\" Updated 2008-04-04, Akihiro MOTOKI, LDP v2.79
70 .\" Updated 2008-08-08, Akihiro MOTOKI, LDP v3.05
71 .\" Updated 2010-04-23, Akihiro MOTOKI, LDP v3.24
72 .\"
73 .\"WORD:        descriptor              ディスクリプタ
74 .\"WORD:        file description        ファイル記述
75 .\"WORD:        open                    オープン
76 .\"WORD:        create                  作成
77 .\"WORD:        file offset             ファイル・オフセット
78 .\"WORD:        controling terminal     制御端末
79 .\"WORD:        non-blocking I/O        非停止 I/O
80 .\"WORD:        synchronous I/O         同期 I/O
81 .\"WORD:        permission              許可
82 .\"WORD:        user                    ユーザー
83 .\"WORD:        owner                   所有者
84 .\"WORD:        group                   グループ
85 .\"WORD:        other                   他人
86 .\"WORD:        kernel                  カーネル
87 .\"WORD:        symbolic link           シンボリック・リンク
88 .\"WORD:        dangling symbolic link  壊れたシンボリック・リンク
89 .\"WORD:        file creation flag      ファイル作成フラグ
90 .\"WORD:        file status flag        ファイル状態フラグ
91 .\"
92 .TH OPEN 2 2010-09-10 "Linux" "Linux Programmer's Manual"
93 .SH 名前
94 open, creat \- ファイルやデバイスのオープン、作成を行う
95 .SH 書式
96 .nf
97 .B #include <sys/types.h>
98 .B #include <sys/stat.h>
99 .B #include <fcntl.h>
100 .sp
101 .BI "int open(const char *" pathname ", int " flags );
102 .BI "int open(const char *" pathname ", int " flags ", mode_t " mode );
103
104 .BI "int creat(const char *" pathname ", mode_t " mode );
105 .fi
106 .SH 説明
107 ファイルの
108 .I pathname
109 を与えると、
110 .BR open ()
111 はファイル・ディスクリプタを返す。
112 ファイル・ディスクリプタは、この後に続くシステムコール
113 .RB ( read "(2), " write "(2), " lseek "(2), " fcntl "(2) など)"
114 で使用される小さな非負の整数である。
115 このシステムコールが成功した場合に返されるファイル・ディスクリプタは
116 そのプロセスがその時点でオープンしていないファイル・ディスクリプタの
117 うち最小の数字のものとなる。
118 .PP
119 デフォルトでは、新しいファイル・ディスクリプタは
120 .BR execve (2)
121 を実行した後もオープンされたままとなる (つまり、
122 .BR fcntl (2)
123 に説明がある
124 .B FD_CLOEXEC
125 ファイル・ディスクリプタ・フラグは最初は無効である;
126 後述の Linux 固有のフラグ
127 .B O_CLOEXEC
128 を使うとこのデフォルトを変更することができる)。
129 ファイル・オフセット (file offset) はファイルの先頭に設定される
130 .RB ( lseek (2)
131 参照)。
132 .PP
133 .BR open ()
134 を呼び出すと、「オープンファイル記述」
135 .I "(open file description)"
136 が作成される。ファイル記述とは、システム全体の
137 オープン中のファイルのテーブルのエントリである。
138 このエントリは、ファイル・オフセットとファイル状態フラグ
139 .RB ( fcntl (2)
140 .B F_SETFL
141 操作により変更可能) が保持する。
142 ファイル・ディスクリプタはこれらのエントリの一つへの参照である。
143 この後で
144 .I pathname
145 が削除されたり、他のファイルを参照するように変更されたりしても、
146 この参照は影響を受けない。
147 新しいオープンファイル記述は最初は他のどのプロセスとも
148 共有されていないが、
149 .BR fork (2)
150 で共有が起こる場合がある。
151 .PP
152 引き数
153 .I flags
154 には、アクセスモード
155 .BR O_RDONLY ", " O_WRONLY ", " O_RDWR
156 のどれかひとつが入っていなければならない。
157 これらはそれぞれ読み込み専用、書き込み専用、読み書き用に
158 ファイルをオープンすることを要求するものである。
159
160 さらに、
161 .I flags
162 には、ファイル作成フラグ (file creation flag) とファイル状態フラグ
163 (file status flag) を 0 個以上「ビット単位の OR (bitwise-or)」で
164 指定することができる。
165 .I ファイル作成フラグ
166
167 .BR O_CREAT ", " O_EXCL ", " O_NOCTTY ", " O_TRUNC
168 である。
169 .I ファイル状態フラグ
170 は以下のリストのうち上記以外の残りのものである。
171 .\" FIXME . Actually is it true that the "file status flags" are all of the
172 .\" remaining flags listed below?  SUSv4 divides the flags into:
173 .\" * Access mode
174 .\" * File creation
175 .\" * File status
176 .\" * Other (O_CLOEXEC, O_DIRECTORY, O_NOFOLLOW)
177 .\" though it's not clear what the difference between "other" and
178 .\" "File creation" flags is.  (I've raised an Aardvark to see if this
179 .\" can be clarified in SUSv4; 10 Oct 2008.)
180 二種類のフラグの違いは、ファイル状態フラグの方は
181 .BR fcntl (2)
182 を使ってその内容を取得したり (場合によっては) 変更したりできる点にある。
183 ファイル作成フラグとファイル状態フラグの全リストを以下に示す:
184 .TP
185 .B O_APPEND
186 ファイルを追加 (append) モードでオープンする。
187 毎回の
188 .BR write (2)
189 の前に
190 .BR lseek (2)
191 を行ったかのように、ファイル・ポインターをファイルの最後に移動する。
192 .\" For more background, see
193 .\" http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=453946
194 .\" http://nfs.sourceforge.net/
195 NFS ファイル・システムで、
196 .B O_APPEND
197 を使用すると、複数のプロセスがひとつのファイルに同時にデータを追加した場合、
198 ファイルが壊れてしまうことがある。
199 これは NFS が追加モードをサポートしていないため、
200 クライアントのカーネル (kernel) がそれをシミュレートしなければならないのだが、
201 競合状態を避けることはできないからである。
202 .TP
203 .B O_ASYNC
204 シグナル駆動 I/O (signal-driven I/O) を有効にする:
205 このファイル・ディスクリプタへの
206 入力または出力が可能になった場合に、シグナルを生成する
207 (デフォルトは
208 .B SIGIO
209 であるが、
210 .BR fcntl (2)
211 によって変更可能である)。
212 この機能が使用可能なのは端末、疑似端末、ソケットのみであり、
213 (Linux 2.6 以降では) パイプと FIFO に対しても使用できる。
214 さらに詳しい説明は
215 .BR fcntl (2)
216 を参照すること。
217 .TP
218 .BR O_CLOEXEC " (Linux 2.6.23 以降)"
219 新しいファイル・ディスクリプタに対して close-on-exec フラグを有効にする。
220 このフラグを指定することで、プログラムは
221 .B FD_CLOEXEC
222 フラグをセットするための
223 .BR fcntl (2)
224 .B F_SETFD
225 操作を別途呼び出す必要がなくなる。
226 また、ある種のマルチスレッドのプログラムはこのフラグの使用は
227 不可欠である。なぜなら、個別に
228 .B FD_CLOEXEC
229 フラグを設定する
230 .BR fcntl (2)
231 .B F_SETFD
232 操作を呼び出したとしても、あるスレッドがファイルディスクリプタを
233 オープンするのと同時に別のスレッドが
234 .BR fork (2)
235
236 .BR execve (2)
237 を実行するという競合条件を避けるのには十分ではないからである。
238 .\" This flag fixes only one form of the race condition;
239 .\" The race can also occur with, for example, descriptors
240 .\" returned by accept(), pipe(), etc.
241 .TP
242 .B O_CREAT
243 ファイルが存在しなかった場合は作成 (create) する。
244 ファイルの所有者 (ユーザー ID) は、プロセスの実効ユーザー ID に設定される。
245 グループ所有権 (グループ ID) は、プロセスの実効グループ ID
246 または親ディレクトリのグループ ID に設定される
247 (これは、ファイルシステムタイプ、マウントオプション、
248 親ディレクトリのモードに依存する。
249 .BR mount (8)
250 で説明されているマウントオプション
251 .I bsdgroups
252
253 .I sysvgroups
254 を参照)。
255 .\" 2.6.25 時点では、bsdgroups は ext2, ext3, ext4, XFS でサポート
256 .\" されている (2.6.14 以降)。
257 .RS
258 .PP
259 .I mode
260 は新しいファイルを作成する場合に使用するアクセス許可 (permission) を指定する。
261 .I flags
262
263 .B O_CREAT
264 が指定されている場合、
265 .I mode
266 を指定しなければならない。
267 .B O_CREAT
268 が指定されていない場合、
269 .I mode
270 は無視される。
271 有効なアクセス許可は、普段と同じようにプロセスの
272 .I umask
273 によって修正され、作成されたファイルの許可は
274 .I "(mode\ &\ ~umask)"
275 となる。
276 このモードは、新しく作成されたファイルに対するそれ以降のアクセス
277 にのみ適用される点に注意すること。
278 読み取り専用のファイルを作成する
279 .BR open ()
280 コールであっても、
281 読み書き可能なファイル・ディスクリプタを返すことがありうる。
282 .PP
283 .I mode
284 のために以下のシンボル定数が提供されている :
285 .TP 9
286 .B S_IRWXU
287 00700 ユーザー (ファイルの所有者) に読み込み、書き込み、
288 実行の許可がある。
289 .TP
290 .B S_IRUSR
291 00400 ユーザーに読み込みの許可がある。
292 .TP
293 .B S_IWUSR
294 00200 ユーザーに書き込みの許可がある。
295 .TP
296 .B S_IXUSR
297 00100 ユーザーに実行の許可がある。
298 .TP
299 .B S_IRWXG
300 00070 グループに読み込み、書き込み、実行の許可がある。
301 .TP
302 .B S_IRGRP
303 00040 グループに読み込みの許可がある。
304 .TP
305 .B S_IWGRP
306 00020 グループに書き込みの許可がある。
307 .TP
308 .B S_IXGRP
309 00010 グループに実行の許可がある。
310 .TP
311 .B S_IRWXO
312 00007 他人 (others) に読み込み、書き込み、実行の許可がある。
313 .TP
314 .B S_IROTH
315 00004 他人に読み込みの許可がある。
316 .TP
317 .B S_IWOTH
318 00002 他人に書き込みの許可がある。
319 .TP
320 .B S_IXOTH
321 00001 他人に実行の許可がある。
322 .RE
323 .TP
324 .BR O_DIRECT " (Linux 2.4.10 以降)"
325 このファイルに対する I/O のキャッシュの効果を最小化しようとする。
326 このフラグを使うと、一般的に性能が低下する。
327 しかしアプリケーションが独自にキャッシングを行っているような
328 特別な場合には役に立つ。
329 ファイルの I/O はユーザー空間バッファに対して直接行われる。
330 .B O_DIRECT
331 フラグ自身はデータを同期で転送しようとはするが、
332 .B O_SYNC
333 のようにデータと必要なメタデータの転送が保証されるわけではない。
334 同期 I/O を保証するためには、
335 .B O_DIRECT
336 に加えて
337 .B O_SYNC
338 を使用しなければならない。
339 「注意」の節 (下記) の議論も参照。
340 .sp
341 ブロックデバイスに対する似通った意味のインターフェースが
342 .BR raw (8)
343 で説明されている (但し、このインタフェースは非推奨である)。
344 .TP
345 .B O_DIRECTORY
346 \fIpathname\fP がディレクトリでなければオープンは失敗する。
347 .\" 以下の記事とそのリプライを参照のこと。
348 .\" http://marc.theaimsgroup.com/?t=112748702800001&r=1&w=2
349 .\" [PATCH] open: O_DIRECTORY and O_CREAT together should fail
350 .\" O_DIRECTORY | O_CREAT を指定すると O_DIRECTORY が無視されてしまう。
351 このフラグは Linux 特有であり、
352 .BR opendir (3)
353 が FIFO やテープデバイスに対してコールされた場合の
354 サービス不能 (denial-of-service) 攻撃を避けるために
355 カーネル 2.1.126 で追加された。
356 しかしこれは
357 .BR opendir (3)
358 の実装以外では使用するべきではない。
359 .TP
360 .B O_EXCL
361 この呼び出しでファイルが作成されることを保証する。
362 このフラグが
363 .B O_CREAT
364 と一緒に指定され、
365 .I pathname
366 のファイルが既に存在した場合、
367 .BR open ()
368 は失敗する。
369 .B O_CREAT
370 が指定されなかった場合の
371 .B O_EXCL
372 の動作は未定義である。
373
374 これら二つのフラグが指定された際、シンボリックリンクは辿られない。
375 .\" POSIX.1-2001 では明示的にこの動作を要求している。
376 .I pathname
377 がシンボリックリンクの場合、
378 シンボリックリンクがどこを指しているかに関わらず
379 .BR open ()
380 は失敗する。
381
382 NFS では、
383 .B O_EXCL
384 は、Linux 2.6 以降で NFSv3 以降を使っている場合でのみサポートされる。
385 .B O_EXCL
386 サポートが提供されていない NFS 環境では、このフラグに頼って
387 ロック処理を実行するプログラムは競合状態 (race condition) に出会う
388 可能性がある。
389 ロックファイルを使用して不可分 (atomic) なファイルロックを実現し、
390 NFS が
391 .B O_EXCL
392 をサポートしているかに依存しないようにしたい場合、
393 移植性のある方法は、同じファイルシステム上に他と名前の重ならない
394 ファイル (例えばホスト名と PID を組み合わせた名前) を作成し、
395 .BR link (2)
396 を使用してそのロックファイルへのリンクを作成することである。
397 .BR link (2)
398 コールの返り値が 0 ならばロックに成功している。
399 あるいは、そのファイルに
400 .BR stat (2)
401 を使用してリンク数 (link count) が 2 になっているかをチェックする。
402 そうなっていれば、同じくロックに成功しているということである。
403 .TP
404 .B O_LARGEFILE
405 (LFS)
406 .I off_t
407 ではサイズを表せない (だだし
408 .I off64_t
409 ではサイズを表せる) ファイルをオープン可能にする。
410 この定義を有効にするためには、
411 (「どの」ヘッダファイルをインクルードするよりも前に)
412 .B _LARGEFILE64_SOURCE
413 マクロを定義しなければならない。
414 32ビットシステムにおいて大きなファイルにアクセスする方法を得たい場合、
415 .RB ( O_LARGEFILE
416 を使うよりも)
417 .B _FILE_OFFSET_BITS
418 機能検査マクロをセットする方が望ましい方法である
419 .RB ( feature_test_macros (7)
420 を参照)。
421 .TP
422 .BR O_NOATIME " (Linux 2.6.8 以降)"
423 ファイルに対して
424 .BR read (2)
425 が実行されたときに、最終アクセス時刻 (inode の st_atime) を更新しない。
426 このフラグはインデックス作成やバックアッププログラムで使うことを意図している。
427 これを使うとディスクに対する操作を大幅に減らすことができる。
428 このフラグは全てのファイルシステムに対して有効であるわけではない。
429 その一例が NFS であり、サーバがアクセス時刻を管理している。
430 .\" The O_NOATIME flag also affects the treatment of st_atime
431 .\" by mmap() and readdir(2), MTK, Dec 04.
432 .TP
433 .B O_NOCTTY
434 .I pathname
435 が端末 (terminal) デバイス
436 \(em
437 .BR tty (4)
438 参照
439 \(em
440 を指している場合に、たとえそのプロセスが制御端末を持っていなくても、
441 オープンしたファイルは制御端末にはならない。
442 .TP
443 .B O_NOFOLLOW
444 \fIpathname\fP がシンボリック・リンクだった場合、オープンは失敗する。
445 これは FreeBSD の拡張で、Linux には 2.1.126 より追加された。
446 pathname の前のコンポーネント (earlier component;
447 訳註: 最後のディレクトリセパレータより前の部分) が
448 シンボリック・リンクである場合には、それが指す先が参照される。
449 .\" glibc 2.0.100 以降のヘッダーにはこのフラグの定義がある。
450 .\" \fI2.1.126 以前のカーネルで使用した場合には無視される。\fP
451 .TP
452 .BR O_NONBLOCK " または " O_NDELAY
453 可能ならば、ファイルは非停止 (nonblocking) モードでオープンされる。
454 .BR open ()
455 も、返したファイル・ディスクリプタに対する以後のすべての操作も
456 呼び出したプロセスを待たせることはない。
457 FIFO (ネームド・パイプ) を扱う場合には
458 .BR fifo (7)
459 も参照すること。
460 強制ファイルロック (mandatory file lock) やファイルリース (file lease)
461 と組み合わせた場合の、
462 .B O_NONBLOCK
463 の効果についての議論は、
464 .BR fcntl (2)
465 を参照すること。
466 .TP
467 .B O_SYNC
468 ファイルは同期 (synchronous) I/O モードでオープンされる。
469 .BR open ()
470 が返したファイル・ディスクリプタに対して
471 .BR write (2)
472 を行うと、必ず呼び出したプロセスをブロックし、
473 該当ハードウェアに物理的に書き込まれるまで返らない。
474 .I 以下の「注意」の章も参照。
475 .TP
476 .B O_TRUNC
477 ファイルが既に存在し、通常ファイルであり、
478 書き込み可モードでオープンされている
479 (つまり、
480 .BR O_RDWR "または" O_WRONLY
481 の) 場合、長さ 0 に切り詰め (truncate) られる。
482 ファイルが FIFO または端末デバイスファイルの場合、
483 .B O_TRUNC
484 フラグは無視される。
485 それ以外の場合、
486 .B O_TRUNC
487 の効果は未定義である。
488 .PP
489 これらの選択フラグのいくつかはファイルをオープンした後でも
490 .BR fcntl (2)
491 を使用して変更することができる。
492
493 .BR creat ()
494
495 .I flags
496
497 .B O_CREAT|O_WRONLY|O_TRUNC
498 を指定して
499 .BR open ()
500 を行うのと等価である。
501 .SH 返り値
502 .BR open ()
503
504 .BR creat ()
505 は新しいファイル・ディスクリプタを返す。
506 エラーが発生した場合は \-1 を返す
507 (その場合は
508 .I errno
509 が適切に設定される)。
510 .SH エラー
511 .TP
512 .B EACCES
513 ファイルに対する要求されたアクセスが許されていないか、
514 .I pathname
515 のディレクトリ部分の何れかのディレクトリに検索許可がなかった。
516 またはファイルが存在せず、親ディレクトリへの書き込み許可がなかった。
517 .RB ( path_resolution (7)
518 も参照すること。)
519 .TP
520 .B EEXIST
521 .I pathname
522 は既に存在し、
523 .BR O_CREAT " と " O_EXCL
524 が使用された。
525 .TP
526 .B EFAULT
527 .I pathname
528 の指す領域がアクセス可能なアドレス空間にない。
529 .TP
530 .B EFBIG
531 .B EOVERFLOW
532 参照。
533 .TP
534 .B EINTR
535 遅いデバイス
536 (例えば FIFO、
537 .BR fifo (7)
538 参照) のオープンが完了するのを待って停止している間に
539 システムコールがシグナルハンドラにより割り込まれた。
540 .BR signal (7)
541 参照。
542 .TP
543 .B EISDIR
544 .I pathname
545 はディレクトリを参照しており、書き込み要求が含まれていた
546 (つまり
547 .B O_WRONLY
548 または
549 .B O_RDWR
550 が設定されている)。
551 .TP
552 .B ELOOP
553 .I pathname
554 を解決する際に遭遇したシンボリック・リンクが多過ぎる。
555 または \fBO_NOFOLLOW\fP が指定されており、
556 .I pathname
557 がシンボリックリンクだった。
558 .TP
559 .B EMFILE
560 プロセスがオープンしているファイル数がすでに最大数に達している。
561 .TP
562 .B ENAMETOOLONG
563 .I pathname
564 が長過ぎる。
565 .TP
566 .B ENFILE
567 オープンできるファイルの合計数がシステム制限に達している。
568 .TP
569 .B ENODEV
570 .I pathname
571 がデバイス・スペシャル・ファイルを参照しており、対応するデバイスが存在しない。
572 (これは Linux カーネルのバグであり、この場合には
573 .B ENXIO
574 が返されるべきである)
575 .TP
576 .B ENOENT
577 .B O_CREAT
578 が設定されておらず、かつ指定されたファイルが存在しない。
579 または、
580 .I pathname
581 のディレクトリ部分が存在しないか壊れた (dangling) シンボリック・リンクである。
582 .TP
583 .B ENOMEM
584 カーネルに利用できるメモリが不足している
585 .TP
586 .B ENOSPC
587 .I pathname
588 を作成する必要があるが、
589 .I pathname
590 を含んでいるデバイスに新しいファイルのための空き容量がない。
591 .TP
592 .B ENOTDIR
593 .I pathname
594 に含まれるディレクトリ部分のどれかが実際にはディレクトリでない。
595 または \fBO_DIRECTORY\fP が指定されており、
596 .I pathname
597 がディレクトリでない。
598 .TP
599 .B ENXIO
600 .BR O_NONBLOCK " | " O_WRONLY
601 が設定されており、指定したファイルが FIFO で
602 そのファイルを読み込みのためにオープンしているプロセスが存在しない。
603 または、ファイルがデバイス・スペシャル・ファイルで
604 対応するデバイスが存在しない。
605 .TP
606 .B EOVERFLOW
607 .I pathname
608 が参照しているのが、大き過ぎてオープンできない通常のファイルである。
609 通常、このエラーが発生するは、32 ビットプラットフォーム上で
610 .I -D_FILE_OFFSET_BITS=64
611 を指定せずにコンパイルされたアプリケーションが、ファイルサイズが
612 .I (2<31)-1
613 ビットを超えるファイルを開こうとした場合である。
614 上記の
615 .B O_LARGEFILE
616 も参照。
617 これは POSIX.1-2001 で規定されているエラーである。
618 2.6.24 より前のカーネルでは、Linux はこの場合にエラー
619 .B EFBIG
620 を返していた。
621 .\" See http://bugzilla.kernel.org/show_bug.cgi?id=7253
622 .\" "Open of a large file on 32-bit fails with EFBIG, should be EOVERFLOW"
623 .\" Reported 2006-10-03
624 .TP
625 .B EPERM
626 .B O_NOATIME
627 フラグが指定されたが、呼び出し元の実効ユーザー ID が
628 .\" 厳密に言えば、呼び出し元のファイルシステム UID...(MTK)
629 ファイルの所有者と一致せず、かつ呼び出し元に特権
630 .RB ( CAP_FOWNER )
631 がない。
632 .TP
633 .B EROFS
634 .I pathname
635 が読み込み専用のファイルシステム上のファイルを参照しており、
636 書き込みアクセスが要求された。
637 .TP
638 .B ETXTBSY
639 .I pathname
640 が現在実行中の実行イメージを参照しており、書き込みが要求された。
641 .TP
642 .B EWOULDBLOCK
643 .B O_NONBLOCK
644 フラグが指定されたが、そのファイルには矛盾するリースが設定されていた
645 .RB ( fcntl (2)
646 参照)。
647 .SH 準拠
648 SVr4, 4.3BSD, POSIX.1-2001.
649 フラグ
650 .BR O_DIRECTORY ,
651 .BR O_NOATIME ,
652 .B O_NOFOLLOW
653 は Linux 特有のものであり、
654 これらのフラグの定義を得るためには、
655 (「どの」ヘッダファイルをインクルードするよりも前に)
656 .B _GNU_SOURCE
657 を定義する必要があるかもしれない。
658
659 .BR O_CLOEXEC
660 フラグは POSIX.1-2001 では規定されていないが、
661 POSIX.1-2008 で規定されている。
662
663 .B O_DIRECT
664 は POSIX では規定されていない。
665 .B O_DIRECT
666 の定義を得るには
667 (「どの」ヘッダファイルをインクルードするよりも前に)
668 .B _GNU_SOURCE
669 を定義しなければならない。
670 .SH 注意
671 Linux では、
672 .B O_NONBLOCK
673 フラグは、
674 open を実行したいが read または write を実行する意図は
675 必ずしもないことを意味する。
676 これは
677 .BR ioctl (2)
678 のためのファイルディスクリプタを取得するために、
679 デバイスをオープンするときによく用いられる。
680
681 「アクセスモード」の値
682 .BR O_RDONLY ", " O_WRONLY ", " O_RDWR
683 は、
684 .I flags
685 に指定できる他の値と違い、個々のビットを指定するものではなく、
686 これらの値は
687 .I flags
688 の下位 2 ビットを定義する。
689 .BR O_RDONLY ", " O_WRONLY ", " O_RDWR
690 はそれぞれ 0, 1, 2 に定義されている。
691 言い換えると、
692 .B "O_RDONLY | O_WRONLY"
693 の組み合わせは論理的に間違いであり、確かに
694 .B O_RDWR
695 と同じ意味ではない。
696 Linux では、特別な、非標準なアクセスモードとして 3 (バイナリでは 11) が
697 予約されており
698 .I flags
699 に指定できる。
700 このアクセスモードを指定すると、ファイルの読み出し/書き込み許可をチェックし、
701 読み出しにも書き込みにも使用できないディスクリプタを返す。
702 この非標準のアクセスモードはいくつかの Linux ドライバで使用されており、
703 デバイス固有の
704 .BR ioctl (2)
705 操作にのみ使用されるディスクリプタを返すために使われている。
706 .\" See for example util-linux's disk-utils/setfdprm.c
707 .\" For some background on access mode 3, see
708 .\" http://thread.gmane.org/gmane.linux.kernel/653123
709 .\" "[RFC] correct flags to f_mode conversion in __dentry_open"
710 .\" LKML, 12 Mar 2008
711 .LP
712 .B O_RDONLY | O_TRUNC
713 の影響は未定義であり、その動作は実装によって異なる。
714 多くのシステムではファイルは実際に切り詰められる。
715 .\" Linux 2.0, 2.5: truncate
716 .\" Solaris 5.7, 5.8: truncate
717 .\" Irix 6.5: truncate
718 .\" Tru64 5.1B: truncate
719 .\" HP-UX 11.22: truncate
720 .\" FreeBSD 4.7: truncate
721 .PP
722 NFS を実現しているプロトコルには多くの不備があり、特に
723 .BR O_SYNC " と " O_NDELAY
724 に影響する。
725
726 POSIX では、3 種類の同期 I/O が提供されており、
727 .BR O_SYNC ,
728 .BR O_DSYNC ,
729 .BR O_RSYNC
730 フラグがこれに対応するものである。
731 今のところ (カーネル 2.6.31)、
732 Linux では
733 .B O_SYNC
734 だけが実装されているが、
735 glibc は
736 .B O_DSYNC
737
738 .B O_RSYNC
739
740 .B O_SYNC
741 と同じ数値を割り当てている。
742 ほとんどの Linux のファイルシステムは、実際には POSIX の
743 .B O_SYNC
744 の動作ではなく
745 .B O_DSYNC
746 の動作だけを実装している。
747 POSIX の
748 .B O_SYNC
749 では、
750 .BR open ()
751 がユーザ空間に返る際に、書き込みに関する全てのメタデータの
752 更新がディスクに書き込まれている必要がある。
753 一方、
754 .B O_DSYNC
755 では、
756 .BR open ()
757 が返るまでに、実際のファイルのデータとそのデータを取得するために
758 必要なメタデータだけがディスクに書き込まれていればよい。
759
760 .BR open ()
761 はスペシャル・ファイルをオープンすることができるが、
762 .BR creat ()
763 でスペシャル・ファイルを作成できない点に注意すること。
764 代わりに
765 .BR mknod (2)
766 を使用する。
767 .LP
768 UID マッピングを使用している NFS ファイル・システムでは、
769 .BR open ()
770 がファイル・ディスクリプタを返した場合でも
771 .BR read (2)
772 が \fBEACCES\fP で拒否される場合がある。
773 これはクライアントがアクセス許可のチェックを行って
774 .BR open ()
775 を実行するが、読み込みや書き込みの際には
776 サーバーで UID マッピングが行われるためである。
777
778 ファイルが新しく作成されると、
779 ファイルの
780 .IR st_atime ,
781 .IR st_ctime ,
782 .I st_mtime
783 フィールド
784 (それぞれ最終アクセス時刻、最終状態変更時刻、最終修正時刻である。
785 .BR stat (2)
786 参照) が現在時刻に設定される。
787 さらに親ディレクトリの
788 .I st_ctime
789
790 .I st_mtime
791 も現在時刻に設定される。
792 それ以外の場合で、O_TRUNC フラグでファイルが修正されたときは、
793 ファイルの
794 .I st_ctime
795
796 .I st_mtime
797 フィールドが現在時刻に設定される。
798 .SS O_DIRECT
799 .LP
800 .B O_DIRECT
801 フラグを使用する場合、ユーザ空間バッファの長さやアドレス、
802 I/O のファイルオフセットに関してアラインメントの制限が課されることがある。
803 Linux では、アラインメントの制限はファイルシステムやカーネルのバージョンに
804 よって異なり、全く制限が存在しない場合もある。
805 しかしながら、現在のところ、指定されたファイルやファイルシステムに対して
806 こうした制限があるかを見つけるための、アプリケーション向けのインタフェースで
807 ファイルシステム非依存のものは存在しない。
808 いくつかのファイルシステムでは、制限を確認するための独自のインタフェースが
809 提供されている。例えば、
810 .BR xfsctl (3)
811
812 .B XFS_IOC_DIOINFO
813 命令である。
814 .LP
815 Linux 2.4 では、転送サイズ、
816 ユーザーバッファのアラインメント、ファイルオフセットは、
817 ファイルシステムの論理ブロックサイズの倍数でなければならない。
818 Linux 2.6 では、512 バイトごとの境界に配置されていれば充分である。
819 .LP
820 .B O_DIRECT
821 フラグは  SGI IRIX で導入された。SGI IRIX にも Linux 2.4 と同様の
822 (ユーザーバッファの) アラインメントの制限がある。
823 また、IRIX には適切な配置とサイズを取得するための
824 .BR fcntl (2)
825 コールがある。
826 FreeBSD 4.x も同じ名前のフラグを導入したが、アラインメントの制限はない。
827 .LP
828 .B O_DIRECT
829 が Linux でサポートされたのは、カーネルバージョン 2.4.10 である。
830 古い Linux カーネルは、このフラグを単に無視する。
831 .B O_DIRECT
832 フラグをサポートしていないファイルシステムもあり、その場合は、
833 .B O_DIRECT
834 を使用すると
835 .BR open ()
836
837 .B EINVAL
838 で失敗する。
839 .LP
840 アプリケーションは、同じファイル、
841 特に同じファイルの重複するバイト領域に対して、
842 .B O_DIRECT
843 と通常の I/O を混ぜて使うのは避けるべきである。
844 ファイルシステムがこのような状況において一貫性の問題を正しく
845 扱うことができる場合であっても、全体の I/O スループットは
846 どちらか一方を使用するときと比べて低速になるであろう。
847 同様に、アプリケーションは、同じファイルに対して
848 .BR mmap (2)
849 と直接 I/O
850 .RB ( O_DIRECT )
851 を混ぜて使うのも避けるべきである。
852 .LP
853 NFS で
854 .B O_DIRECT
855 を使った場合の動作はローカルのファイルシステムの場合と違う。
856 古いカーネルや、ある種の設定でコンパイルされたカーネルは、
857 .B O_DIRECT
858 と NFS の組み合わせをサポートしていないかもしれない。
859 NFS プロトコル自体はサーバにフラグを渡す機能は持っていないので、
860 .B O_DIRECT
861 I/O はクライアント上のページキャッシュをバイパスするだけになり、
862 サーバは I/O をキャッシュしているかもしれない。
863 クライアントは、
864 .B O_DIRECT
865 の同期機構を保持するため、サーバに対して I/O を同期して行うように依頼する。
866 サーバによっては、こうした状況下、特に I/O サイズが小さい場合に
867 性能が大きく劣化する。
868 また、サーバによっては、I/O が安定したストレージにまで行われたと、
869 クライアントに対して嘘をつくものもある。
870 これは、サーバの電源故障が起こった際にデータの完全性が保たれない
871 危険は少しあるが、性能面での不利な条件を回避するために行われている。
872 Linux の NFS クライアントでは
873 .B O_DIRECT
874 I/O 
875 でのアラインメントの制限はない。
876 .PP
877 まとめると、
878 .B O_DIRECT
879 は、注意して使うべきであるが、強力なツールとなる可能性を持っている。
880 アプリケーションは
881 .B O_DIRECT
882 をデフォルトでは無効になっている性能向上のためのオプションと
883 考えておくのがよいであろう。
884 .PP
885 .RS
886 「O_DIRECT でいつも困るのは、インタフェース全部が本当にお馬鹿な点だ。
887 たぶん危ないマインドコントロール剤で
888 頭がおかしくなったサルが設計したんじゃないかな」 \(em Linus
889 .RE
890 .SH バグ
891 現在のところ、
892 .BR open ()
893 の呼び出し時に
894 .B O_ASYNC
895 を指定してシグナル駆動 I/O を有効にすることはできない。
896 このフラグを有効にするには
897 .BR fcntl (2)
898 を使用すること。
899 .\" FIXME . Check bugzilla report on open(O_ASYNC)
900 .\" See http://bugzilla.kernel.org/show_bug.cgi?id=5993
901 .SH 関連項目
902 .BR chmod (2),
903 .BR chown (2),
904 .BR close (2),
905 .BR dup (2),
906 .BR fcntl (2),
907 .BR link (2),
908 .BR lseek (2),
909 .BR mknod (2),
910 .BR mmap (2),
911 .BR mount (2),
912 .BR openat (2),
913 .BR read (2),
914 .BR socket (2),
915 .BR stat (2),
916 .BR umask (2),
917 .BR unlink (2),
918 .BR write (2),
919 .BR fopen (3),
920 .BR fifo (7),
921 .BR path_resolution (7),
922 .BR symlink (7)