1 .\" Hey Emacs! This file is -*- nroff -*- source.
3 .\" This manpage is Copyright (C) 1992 Drew Eckhardt;
4 .\" 1993 Michael Haardt, Ian Jackson.
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.
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.
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
24 .\" Formatted or processed versions of this manual, if unaccompanied by
25 .\" the source, must acknowledge the copyright and authors of this work.
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
45 .\" 2008-02-26, Michael Haardt: Reorganized text for O_CREAT and mode
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.
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
73 .\"WORD: descriptor ディスクリプタ
74 .\"WORD: file description ファイル記述
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 許可
87 .\"WORD: symbolic link シンボリック・リンク
88 .\"WORD: dangling symbolic link 壊れたシンボリック・リンク
89 .\"WORD: file creation flag ファイル作成フラグ
90 .\"WORD: file status flag ファイル状態フラグ
92 .TH OPEN 2 2010-09-10 "Linux" "Linux Programmer's Manual"
94 open, creat \- ファイルやデバイスのオープン、作成を行う
97 .B #include <sys/types.h>
98 .B #include <sys/stat.h>
101 .BI "int open(const char *" pathname ", int " flags );
102 .BI "int open(const char *" pathname ", int " flags ", mode_t " mode );
104 .BI "int creat(const char *" pathname ", mode_t " mode );
112 ファイル・ディスクリプタは、この後に続くシステムコール
113 .RB ( read "(2), " write "(2), " lseek "(2), " fcntl "(2) など)"
115 このシステムコールが成功した場合に返されるファイル・ディスクリプタは
116 そのプロセスがその時点でオープンしていないファイル・ディスクリプタの
119 デフォルトでは、新しいファイル・ディスクリプタは
121 を実行した後もオープンされたままとなる (つまり、
125 ファイル・ディスクリプタ・フラグは最初は無効である;
128 を使うとこのデフォルトを変更することができる)。
129 ファイル・オフセット (file offset) はファイルの先頭に設定される
135 .I "(open file description)"
136 が作成される。ファイル記述とは、システム全体の
137 オープン中のファイルのテーブルのエントリである。
138 このエントリは、ファイル・オフセットとファイル状態フラグ
142 ファイル・ディスクリプタはこれらのエントリの一つへの参照である。
145 が削除されたり、他のファイルを参照するように変更されたりしても、
147 新しいオープンファイル記述は最初は他のどのプロセスとも
155 .BR O_RDONLY ", " O_WRONLY ", " O_RDWR
156 のどれかひとつが入っていなければならない。
157 これらはそれぞれ読み込み専用、書き込み専用、読み書き用に
158 ファイルをオープンすることを要求するものである。
162 には、ファイル作成フラグ (file creation flag) とファイル状態フラグ
163 (file status flag) を 0 個以上「ビット単位の OR (bitwise-or)」で
167 .BR O_CREAT ", " O_EXCL ", " O_NOCTTY ", " O_TRUNC
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:
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 二種類のフラグの違いは、ファイル状態フラグの方は
182 を使ってその内容を取得したり (場合によっては) 変更したりできる点にある。
183 ファイル作成フラグとファイル状態フラグの全リストを以下に示す:
186 ファイルを追加 (append) モードでオープンする。
191 を行ったかのように、ファイル・ポインターをファイルの最後に移動する。
192 .\" For more background, see
193 .\" http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=453946
194 .\" http://nfs.sourceforge.net/
197 を使用すると、複数のプロセスがひとつのファイルに同時にデータを追加した場合、
199 これは NFS が追加モードをサポートしていないため、
200 クライアントのカーネル (kernel) がそれをシミュレートしなければならないのだが、
201 競合状態を避けることはできないからである。
204 シグナル駆動 I/O (signal-driven I/O) を有効にする:
206 入力または出力が可能になった場合に、シグナルを生成する
212 この機能が使用可能なのは端末、疑似端末、ソケットのみであり、
213 (Linux 2.6 以降では) パイプと FIFO に対しても使用できる。
218 .BR O_CLOEXEC " (Linux 2.6.23 以降)"
219 新しいファイル・ディスクリプタに対して close-on-exec フラグを有効にする。
226 また、ある種のマルチスレッドのプログラムはこのフラグの使用は
232 操作を呼び出したとしても、あるスレッドがファイルディスクリプタを
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.
243 ファイルが存在しなかった場合は作成 (create) する。
244 ファイルの所有者 (ユーザー ID) は、プロセスの実効ユーザー ID に設定される。
245 グループ所有権 (グループ ID) は、プロセスの実効グループ ID
246 または親ディレクトリのグループ ID に設定される
247 (これは、ファイルシステムタイプ、マウントオプション、
255 .\" 2.6.25 時点では、bsdgroups は ext2, ext3, ext4, XFS でサポート
256 .\" されている (2.6.14 以降)。
260 は新しいファイルを作成する場合に使用するアクセス許可 (permission) を指定する。
271 有効なアクセス許可は、普段と同じようにプロセスの
273 によって修正され、作成されたファイルの許可は
274 .I "(mode\ &\ ~umask)"
276 このモードは、新しく作成されたファイルに対するそれ以降のアクセス
281 読み書き可能なファイル・ディスクリプタを返すことがありうる。
284 のために以下のシンボル定数が提供されている :
287 00700 ユーザー (ファイルの所有者) に読み込み、書き込み、
291 00400 ユーザーに読み込みの許可がある。
294 00200 ユーザーに書き込みの許可がある。
300 00070 グループに読み込み、書き込み、実行の許可がある。
303 00040 グループに読み込みの許可がある。
306 00020 グループに書き込みの許可がある。
312 00007 他人 (others) に読み込み、書き込み、実行の許可がある。
324 .BR O_DIRECT " (Linux 2.4.10 以降)"
325 このファイルに対する I/O のキャッシュの効果を最小化しようとする。
326 このフラグを使うと、一般的に性能が低下する。
327 しかしアプリケーションが独自にキャッシングを行っているような
329 ファイルの I/O はユーザー空間バッファに対して直接行われる。
331 フラグ自身はデータを同期で転送しようとはするが、
333 のようにデータと必要なメタデータの転送が保証されるわけではない。
341 ブロックデバイスに対する似通った意味のインターフェースが
343 で説明されている (但し、このインタフェースは非推奨である)。
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 が無視されてしまう。
353 が FIFO やテープデバイスに対してコールされた場合の
354 サービス不能 (denial-of-service) 攻撃を避けるために
361 この呼び出しでファイルが作成されることを保証する。
374 これら二つのフラグが指定された際、シンボリックリンクは辿られない。
375 .\" POSIX.1-2001 では明示的にこの動作を要求している。
378 シンボリックリンクがどこを指しているかに関わらず
384 は、Linux 2.6 以降で NFSv3 以降を使っている場合でのみサポートされる。
386 サポートが提供されていない NFS 環境では、このフラグに頼って
387 ロック処理を実行するプログラムは競合状態 (race condition) に出会う
389 ロックファイルを使用して不可分 (atomic) なファイルロックを実現し、
392 をサポートしているかに依存しないようにしたい場合、
393 移植性のある方法は、同じファイルシステム上に他と名前の重ならない
394 ファイル (例えばホスト名と PID を組み合わせた名前) を作成し、
396 を使用してそのロックファイルへのリンクを作成することである。
398 コールの返り値が 0 ならばロックに成功している。
401 を使用してリンク数 (link count) が 2 になっているかをチェックする。
402 そうなっていれば、同じくロックに成功しているということである。
409 ではサイズを表せる) ファイルをオープン可能にする。
411 (「どの」ヘッダファイルをインクルードするよりも前に)
412 .B _LARGEFILE64_SOURCE
414 32ビットシステムにおいて大きなファイルにアクセスする方法を得たい場合、
418 機能検査マクロをセットする方が望ましい方法である
419 .RB ( feature_test_macros (7)
422 .BR O_NOATIME " (Linux 2.6.8 以降)"
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.
440 を指している場合に、たとえそのプロセスが制御端末を持っていなくても、
441 オープンしたファイルは制御端末にはならない。
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
452 .BR O_NONBLOCK " または " O_NDELAY
453 可能ならば、ファイルは非停止 (nonblocking) モードでオープンされる。
455 も、返したファイル・ディスクリプタに対する以後のすべての操作も
457 FIFO (ネームド・パイプ) を扱う場合には
460 強制ファイルロック (mandatory file lock) やファイルリース (file lease)
468 ファイルは同期 (synchronous) I/O モードでオープンされる。
472 を行うと、必ず呼び出したプロセスをブロックし、
473 該当ハードウェアに物理的に書き込まれるまで返らない。
477 ファイルが既に存在し、通常ファイルであり、
480 .BR O_RDWR "または" O_WRONLY
481 の) 場合、長さ 0 に切り詰め (truncate) られる。
482 ファイルが FIFO または端末デバイスファイルの場合、
489 これらの選択フラグのいくつかはファイルをオープンした後でも
497 .B O_CREAT|O_WRONLY|O_TRUNC
513 ファイルに対する要求されたアクセスが許されていないか、
515 のディレクトリ部分の何れかのディレクトリに検索許可がなかった。
516 またはファイルが存在せず、親ディレクトリへの書き込み許可がなかった。
517 .RB ( path_resolution (7)
523 .BR O_CREAT " と " O_EXCL
528 の指す領域がアクセス可能なアドレス空間にない。
538 参照) のオープンが完了するのを待って停止している間に
539 システムコールがシグナルハンドラにより割り込まれた。
545 はディレクトリを参照しており、書き込み要求が含まれていた
554 を解決する際に遭遇したシンボリック・リンクが多過ぎる。
555 または \fBO_NOFOLLOW\fP が指定されており、
560 プロセスがオープンしているファイル数がすでに最大数に達している。
567 オープンできるファイルの合計数がシステム制限に達している。
571 がデバイス・スペシャル・ファイルを参照しており、対応するデバイスが存在しない。
572 (これは Linux カーネルのバグであり、この場合には
578 が設定されておらず、かつ指定されたファイルが存在しない。
581 のディレクトリ部分が存在しないか壊れた (dangling) シンボリック・リンクである。
590 を含んでいるデバイスに新しいファイルのための空き容量がない。
594 に含まれるディレクトリ部分のどれかが実際にはディレクトリでない。
595 または \fBO_DIRECTORY\fP が指定されており、
600 .BR O_NONBLOCK " | " O_WRONLY
601 が設定されており、指定したファイルが FIFO で
602 そのファイルを読み込みのためにオープンしているプロセスが存在しない。
603 または、ファイルがデバイス・スペシャル・ファイルで
608 が参照しているのが、大き過ぎてオープンできない通常のファイルである。
609 通常、このエラーが発生するは、32 ビットプラットフォーム上で
610 .I -D_FILE_OFFSET_BITS=64
611 を指定せずにコンパイルされたアプリケーションが、ファイルサイズが
613 ビットを超えるファイルを開こうとした場合である。
617 これは POSIX.1-2001 で規定されているエラーである。
618 2.6.24 より前のカーネルでは、Linux はこの場合にエラー
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
627 フラグが指定されたが、呼び出し元の実効ユーザー ID が
628 .\" 厳密に言えば、呼び出し元のファイルシステム UID...(MTK)
629 ファイルの所有者と一致せず、かつ呼び出し元に特権
635 が読み込み専用のファイルシステム上のファイルを参照しており、
640 が現在実行中の実行イメージを参照しており、書き込みが要求された。
644 フラグが指定されたが、そのファイルには矛盾するリースが設定されていた
648 SVr4, 4.3BSD, POSIX.1-2001.
655 (「どの」ヘッダファイルをインクルードするよりも前に)
660 フラグは POSIX.1-2001 では規定されていないが、
661 POSIX.1-2008 で規定されている。
667 (「どの」ヘッダファイルをインクルードするよりも前に)
674 open を実行したいが read または write を実行する意図は
678 のためのファイルディスクリプタを取得するために、
679 デバイスをオープンするときによく用いられる。
682 .BR O_RDONLY ", " O_WRONLY ", " O_RDWR
685 に指定できる他の値と違い、個々のビットを指定するものではなく、
689 .BR O_RDONLY ", " O_WRONLY ", " O_RDWR
690 はそれぞれ 0, 1, 2 に定義されている。
692 .B "O_RDONLY | O_WRONLY"
693 の組み合わせは論理的に間違いであり、確かに
696 Linux では、特別な、非標準なアクセスモードとして 3 (バイナリでは 11) が
700 このアクセスモードを指定すると、ファイルの読み出し/書き込み許可をチェックし、
701 読み出しにも書き込みにも使用できないディスクリプタを返す。
702 この非標準のアクセスモードはいくつかの Linux ドライバで使用されており、
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
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
722 NFS を実現しているプロトコルには多くの不備があり、特に
723 .BR O_SYNC " と " O_NDELAY
726 POSIX では、3 種類の同期 I/O が提供されており、
742 ほとんどの Linux のファイルシステムは、実際には POSIX の
751 がユーザ空間に返る際に、書き込みに関する全てのメタデータの
752 更新がディスクに書き込まれている必要がある。
757 が返るまでに、実際のファイルのデータとそのデータを取得するために
758 必要なメタデータだけがディスクに書き込まれていればよい。
761 はスペシャル・ファイルをオープンすることができるが、
763 でスペシャル・ファイルを作成できない点に注意すること。
768 UID マッピングを使用している NFS ファイル・システムでは、
770 がファイル・ディスクリプタを返した場合でも
772 が \fBEACCES\fP で拒否される場合がある。
773 これはクライアントがアクセス許可のチェックを行って
776 サーバーで UID マッピングが行われるためである。
784 (それぞれ最終アクセス時刻、最終状態変更時刻、最終修正時刻である。
792 それ以外の場合で、O_TRUNC フラグでファイルが修正されたときは、
801 フラグを使用する場合、ユーザ空間バッファの長さやアドレス、
802 I/O のファイルオフセットに関してアラインメントの制限が課されることがある。
803 Linux では、アラインメントの制限はファイルシステムやカーネルのバージョンに
804 よって異なり、全く制限が存在しない場合もある。
805 しかしながら、現在のところ、指定されたファイルやファイルシステムに対して
806 こうした制限があるかを見つけるための、アプリケーション向けのインタフェースで
807 ファイルシステム非依存のものは存在しない。
808 いくつかのファイルシステムでは、制限を確認するための独自のインタフェースが
816 ユーザーバッファのアラインメント、ファイルオフセットは、
817 ファイルシステムの論理ブロックサイズの倍数でなければならない。
818 Linux 2.6 では、512 バイトごとの境界に配置されていれば充分である。
821 フラグは SGI IRIX で導入された。SGI IRIX にも Linux 2.4 と同様の
822 (ユーザーバッファの) アラインメントの制限がある。
823 また、IRIX には適切な配置とサイズを取得するための
826 FreeBSD 4.x も同じ名前のフラグを導入したが、アラインメントの制限はない。
829 が Linux でサポートされたのは、カーネルバージョン 2.4.10 である。
830 古い Linux カーネルは、このフラグを単に無視する。
832 フラグをサポートしていないファイルシステムもあり、その場合は、
841 特に同じファイルの重複するバイト領域に対して、
843 と通常の I/O を混ぜて使うのは避けるべきである。
844 ファイルシステムがこのような状況において一貫性の問題を正しく
845 扱うことができる場合であっても、全体の I/O スループットは
846 どちらか一方を使用するときと比べて低速になるであろう。
847 同様に、アプリケーションは、同じファイルに対して
855 を使った場合の動作はローカルのファイルシステムの場合と違う。
856 古いカーネルや、ある種の設定でコンパイルされたカーネルは、
858 と NFS の組み合わせをサポートしていないかもしれない。
859 NFS プロトコル自体はサーバにフラグを渡す機能は持っていないので、
861 I/O はクライアント上のページキャッシュをバイパスするだけになり、
862 サーバは I/O をキャッシュしているかもしれない。
865 の同期機構を保持するため、サーバに対して I/O を同期して行うように依頼する。
866 サーバによっては、こうした状況下、特に I/O サイズが小さい場合に
868 また、サーバによっては、I/O が安定したストレージにまで行われたと、
870 これは、サーバの電源故障が起こった際にデータの完全性が保たれない
871 危険は少しあるが、性能面での不利な条件を回避するために行われている。
879 は、注意して使うべきであるが、強力なツールとなる可能性を持っている。
882 をデフォルトでは無効になっている性能向上のためのオプションと
886 「O_DIRECT でいつも困るのは、インタフェース全部が本当にお馬鹿な点だ。
888 頭がおかしくなったサルが設計したんじゃないかな」 \(em Linus
895 を指定してシグナル駆動 I/O を有効にすることはできない。
899 .\" FIXME . Check bugzilla report on open(O_ASYNC)
900 .\" See http://bugzilla.kernel.org/show_bug.cgi?id=5993
921 .BR path_resolution (7),