は以下のリストのうち上記以外の残りのものである。 二種類のフラグの違いは、ファイル状態フラグの方はその内容を取得したり (場合によっては)
変更したりできる点にある。詳細は \fBfcntl\fP(2) を参照。
-The full list of file creation flags and file status flags is as follows:
+すべてのファイル作成フラグとファイル状態フラグを以下のリストに示す。
.TP
\fBO_APPEND\fP
.\" For more background, see
.TP
\fBO_CLOEXEC\fP (Linux 2.6.23 以降)
.\" NOTE! several otehr man pages refer to this text
-Enable the close\-on\-exec flag for the new file descriptor. Specifying this
-flag permits a program to avoid additional \fBfcntl\fP(2) \fBF_SETFD\fP
-operations to set the \fBFD_CLOEXEC\fP flag.
+新しいファイルディスクリプタに対して close\-on\-exec フラグを有効にする。 このフラグを指定することで、 プログラムは
+\fBFD_CLOEXEC\fP フラグをセットするために \fBfcntl\fP(2) \fBF_SETFD\fP 操作を別途呼び出す必要がなくなる。
.\" This flag fixes only one form of the race condition;
.\" The race can also occur with, for example, descriptors
.\" returned by accept(), pipe(), etc.
-Note that the use of this flag is essential in some multithreaded programs,
-because using a separate \fBfcntl\fP(2) \fBF_SETFD\fP operation to set the
-\fBFD_CLOEXEC\fP flag does not suffice to avoid race conditions where one
-thread opens a file descriptor and attempts to set its close\-on\-exec flag
-using \fBfcntl\fP(2) at the same time as another thread does a \fBfork\fP(2)
-plus \fBexecve\fP(2). Depending on the order of execution, the race may lead
-to the file desriptor returned by \fBopen\fP() being unintentionally leaked to
-the program executed by the child process created by \fBfork\fP(2). (This kind
-of race is in principle possible for any system call that creates a file
-descriptor whose close\-on\-exec flag should be set, and various other Linux
-system calls provide an equivalent of the \fBO_CLOEXEC\fP flag to deal with
-this problem.)
+ある種のマルチスレッドのプログラムはこのフラグの使用は不可欠である点に注意すること。 なぜなら、個別に \fBFD_CLOEXEC\fP フラグを設定する
+\fBfcntl\fP(2) \fBF_SETFD\fP 操作を呼び出したとしても、あるスレッドがファイルディスクリプタを オープンするのと同時に別のスレッドが
+\fBfork\fP(2) と \fBexecve\fP(2) を実行するという競合条件を避けるのには十分ではないからである。
+実行の順序に依存して、この競合条件の結果、 \fBopen\fP() が返したファイルディスクリプタが \fBfork\fP(2)
+で作成された子プロセスにより実行されるプログラムに意図せず見えてしまう可能性がある。 (この種の競合は、 本質的に、 close\-on\-exec
+フラグをセットすべきファイルディスクリプタを作成するどのシステムコールでも起こり得るものであり、 他のいろいろな Linux
+システムコールでこの問題に対処するために \fBO_CLOEXEC\fP と同等の機能が提供されている。)
.TP
\fBO_CREAT\fP
.\" As at 2.6.25, bsdgroups is supported by ext2, ext3, ext4, and
.\" commit 60545d0d4610b02e55f65d141c95b18ccf855b6e
.\" commit f4e0c30c191f87851c4a53454abb55ee276f4a7e
.\" commit bb458c644a59dbba3a1fe59b27106c5e68e1c4bd
-Create an unnamed temporary file. The \fIpathname\fP argument specifies a
-directory; an unnamed inode will be created in that directory's filesystem.
-Anything written to the resulting file will be lost when the last file
-descriptor is closed, unless the file is given a name.
+名前なしの一時ファイルを作成する。 \fIpathname\fP 引き数はディレクトリを指定する。 名前なしの inode
+がそのディレクトリが存在するファイルシステムに作成される。 そのファイルに名前を付与しない限り、 作成されたファイルに書き込まれた内容は、
+最後のファイルディスクリプタがクローズされる際に失われる。
-\fBO_TMPFILE\fP must be specified with one of \fBO_RDWR\fP or \fBO_WRONLY\fP and,
-optionally, \fBO_EXCL\fP. If \fBO_EXCL\fP is not specified, then \fBlinkat\fP(2)
-can be used to link the temporary file into the filesystem, making it
-permanent, using code like the following:
+\fBO_TMPFILE\fP は必ず \fBO_RDWR\fP か \fBO_WRONLY\fP のいずれかと一緒に使わなければならない。 \fBO_EXCL\fP
+も指定することができる。 \fBO_EXCL\fP が指定されなかった場合、 \fBlinkat\fP(2)
+を使って、そのファイルシステムにこの一時ファイルへのリンクを作成し、ファイルを永続化することができる。 以下のコードのようにすればよい。
.in +4n
.nf
fd = open("/path/to/dir", O_TMPFILE | O_RDWR,
S_IRUSR | S_IWUSR);
-/* File I/O on 'fd'... */
+/* 'fd' に対するファイル I/O ... */
snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd);
linkat(AT_FDCWD, path, AT_FDCWD, "/path/for/file",
.fi
.in
-In this case, the \fBopen\fP() \fImode\fP argument determines the file permission
-mode, as with \fBO_CREAT\fP.
+この場合、 \fBopen\fP() の \fImode\fP 引き数は \fBO_CREAT\fP と同様にファイルのアクセス許可モードの決定に使われる。
-Specifying \fBO_EXCL\fP in conjunction with \fBO_TMPFILE\fP prevents a temporary
-file from being linked into the filesystem in the above manner. (Note that
-the meaning of \fBO_EXCL\fP in this case is different from the meaning of
-\fBO_EXCL\fP otherwise.)
+\fBO_TMPFILE\fP とともに \fBO_EXCL\fP を指定すると、
+一時ファイルに対して上記の方法でファイルシステムへのリンクを行うことができなくなる (この場合の \fBO_EXCL\fP の意味は他の場合の
+\fBO_EXCL\fP の意味とは異なる点に注意)。
.\" Inspired by http://lwn.net/Articles/559147/
-There are two main use cases for \fBO_TMPFILE\fP:
+\fBO_TMPFILE\fP には主に二つの用途がある。
.RS
.IP * 3
-Improved \fBtmpfile\fP(3) functionality: race\-free creation of temporary files
-that (1) are automatically deleted when closed; (2) can never be reached via
-any pathname; (3) are not subject to symlink attacks; and (4) do not require
-the caller to devise unique names.
+改善された \fBtmpfile\fP(3) の機能: (1) クローズ時に自動的に削除される、 (2) パス名では決して参照できない、 (3)
+シンボリックリンク攻撃ができない、 (4) 呼び出し元が一意な名前を考える必要がない、 という特長を持つ競合のない一時ファイルの作成。
.IP *
-Creating a file that is initially invisible, which is then populated with
-data and adjusted to have appropriate filesystem attributes (\fBchown\fP(2),
-\fBchmod\fP(2), \fBfsetxattr\fP(2), etc.) before being atomically linked into the
-filesystem in a fully formed state (using \fBlinkat\fP(2) as described above).
+最初は見えないファイルを作成し、 それからデータを書き込んだり、適切なファイルシステム属性を持つように調整したり (\fBchown\fP(2),
+\fBchmod\fP(2), \fBfsetxattr\fP(2) など) した後、 準備が全て整った状態で (上述の \fBlinkat\fP(2) を使って)
+ファイルシステム内にアトミックにリンクを行う。
.RE
.IP
.\" commit 99b6436bc29e4f10e4388c27a3e4810191cc4788
.\" commit ab29743117f9f4c22ac44c13c1647fb24fb2bafe
-\fBO_TMPFILE\fP requires support by the underlying filesystem; only a subset of
-Linux filesystems provide that support. In the initial implementation,
-support was provided in the ex2, ext3, ext4, UDF, Minix, and shmem
-filesystems. XFS support was added in Linux 3.15.
+\fBO_TMPFILE\fP は、 内部で利用されるファイルシステムによるサポートが必要である。 一部の Linux
+ファイルシステムだけがこの機能をサポートしている。 最初の実装では、 ext2, ext3, ext4, UDF, Minix, shmem
+ファイルシステムがサポートしていた。 XFS でのサポートが Linux 3.15 で追加された。
.TP
\fBO_TRUNC\fP
ファイルが既に存在し、通常ファイルであり、 アクセスモードで書き込みが許可されている (つまり、 \fBO_RDWR\fP または \fBO_WRONLY\fP
\fBopen\fP(), \fBopenat\fP(), \fBcreat\fP() は新しいファイルディスクリプタを返す。 エラーが発生した場合は \-1 を返す
(その場合は \fIerrno\fP が適切に設定される)。
.SH エラー
-\fBopen\fP(), \fBopenat\fP(), and \fBcreat\fP() can fail with the following errors:
+\fBopen\fP(), \fBopenat\fP(), \fBcreat\fP() は以下のエラーで失敗する。
.TP
\fBEACCES\fP
ファイルに対する要求されたアクセスが許されていないか、 \fIpathname\fP のディレクトリ部分の何れかのディレクトリに検索許可がなかった。
が設定されている)。
.TP
\fBEISDIR\fP
-\fIpathname\fP refers to an existing directory, \fBO_TMPFILE\fP and one of
-\fBO_WRONLY\fP or \fBO_RDWR\fP were specified in \fIflags\fP, but this kernel version
-does not provide the \fBO_TMPFILE\fP functionality.
+\fIpathname\fP が存在するディレクトリを参照していて、 \fBO_TMPFILE\fP および \fBO_WRONLY\fP と \fBO_RDWR\fP
+の一方が \fIflags\fP に指定されていたが、 このカーネルバージョンでは \fBO_TMPFILE\fP 機能が提供されていない。
.TP
\fBELOOP\fP
\fIpathname\fP を解決する際に遭遇したシンボリックリンクが多過ぎる。
.TP
\fBELOOP\fP
-\fIpathname\fP was a symbolic link, and \fIflags\fP specified \fBO_NOFOLLOW\fP but
-not \fBO_PATH\fP.
+\fIpathname\fP がシンボリックリンクで、 \fIflags\fP に \fBO_NOFOLLOW\fP が指定されたが、 \fBO_PATH\fP
+が指定されていなかった。
.TP
\fBEMFILE\fP
プロセスがオープンしているファイル数がすでに最大数に達している。
(dangling) シンボリックリンクである。
.TP
\fBENOENT\fP
-\fIpathname\fP refers to a nonexistent directory, \fBO_TMPFILE\fP and one of
-\fBO_WRONLY\fP or \fBO_RDWR\fP were specified in \fIflags\fP, but this kernel version
-does not provide the \fBO_TMPFILE\fP functionality.
+\fIpathname\fP が存在しないディレクトリを参照していて、 \fBO_TMPFILE\fP および \fBO_WRONLY\fP と \fBO_RDWR\fP
+の一方が \fIflags\fP に指定されていたが、 このカーネルバージョンでは \fBO_TMPFILE\fP 機能が提供されていない。
.TP
\fBENOMEM\fP
十分なカーネルメモリーがない。
フラグ \fBO_DIRECT\fP, \fBO_NOATIME\fP, \fBO_PATH\fP, \fBO_TMPFILE\fP は Linux 特有のものである。
これらのフラグの定義を得るためには \fB_GNU_SOURCE\fP を定義しなければならない。
-The \fBO_CLOEXEC\fP, \fBO_DIRECTORY\fP, and \fBO_NOFOLLOW\fP flags are not specified
-in POSIX.1\-2001, but are specified in POSIX.1\-2008. Since glibc 2.12, one
-can obtain their definitions by defining either \fB_POSIX_C_SOURCE\fP with a
-value greater than or equal to 200809L or \fB_XOPEN_SOURCE\fP with a value
-greater than or equal to 700. In glibc 2.11 and earlier, one obtains the
-definitions by defining \fB_GNU_SOURCE\fP.
+フラグ \fBO_CLOEXEC\fP, \fBO_DIRECTORY\fP, \fBO_NOFOLLOW\fP は POSIX.1\-2001 では規定されていないが、
+POSIX.1\-2008 では規定されている。 glibc 2.12 以降では、これらの定義を得るには、 \fB_POSIX_C_SOURCE\fP を
+200809L 以上の値で定義するか、 \fB_XOPEN_SOURCE\fP を 700 以上の値で定義する。 glibc 2.11 以前では、
+これらの定義を得るには \fB_GNU_SOURCE\fP を定義する。
-As noted in \fBfeature_test_macros\fP(7), feature test macros such as
-\fB_POSIX_C_SOURCE\fP, \fB_XOPEN_SOURCE\fP, and \fB_GNU_SOURCE\fP must be defined
-before including \fIany\fP header files.
+\fBfeature_test_macros\fP(7) に注意書きがあるように、 \fB_POSIX_C_SOURCE\fP, \fB_XOPEN_SOURCE\fP,
+\fB_GNU_SOURCE\fP などの機能検査マクロは\fIどの\fPヘッダーファイルをインクルードするより前に定義しなければならない。
.SH 注意
Linux では、 \fBO_NONBLOCK\fP フラグは、 open を実行したいが read または write を実行する意図は
必ずしもないことを意味する。 これは \fBioctl\fP(2) のためのファイルディスクリプタを取得するために、
(それぞれ最終アクセス時刻、最終状態変更時刻、最終修正時刻である。 \fBstat\fP(2) 参照) が現在時刻に設定される。 さらに親ディレクトリの
\fIst_ctime\fP と \fIst_mtime\fP も現在時刻に設定される。 それ以外の場合で、O_TRUNC フラグでファイルが修正されたときは、
ファイルの \fIst_ctime\fP と \fIst_mtime\fP フィールドが現在時刻に設定される。
-.SS "Synchronized I/O"
+.SS 同期入出力
The POSIX.1\-2008 "synchronized I/O" option specifies different variants of
synchronized I/O, and specifies the \fBopen\fP() flags \fBO_SYNC\fP, \fBO_DSYNC\fP,
and \fBO_RSYNC\fP for controlling the behavior. Regardless of whether an
UID マッピングを使用している NFS ファイルシステムでは、 \fBopen\fP() がファイルディスクリプタを返した場合でも \fBread\fP(2)
が \fBEACCES\fP で拒否される場合がある。 これはクライアントがアクセス許可のチェックを行って \fBopen\fP()
を実行するが、読み込みや書き込みの際には サーバーで UID マッピングが行われるためである。
-.SS "File access mode"
+.SS ファイルアクセスモード
「アクセスモード」の値 \fBO_RDONLY\fP, \fBO_WRONLY\fP, \fBO_RDWR\fP は、 \fIflags\fP
に指定できる他の値と違い、個々のビットを指定するものではなく、 これらの値は \fIflags\fP の下位 2 ビットを定義する。 \fBO_RDONLY\fP,
\fBO_WRONLY\fP, \fBO_RDWR\fP はそれぞれ 0, 1, 2 に定義されている。 言い換えると、 \fBO_RDONLY |
このアクセスモードを指定すると、ファイルの読み出し/書き込み許可をチェックし、 読み出しにも書き込みにも使用できないディスクリプタを返す。
この非標準のアクセスモードはいくつかの Linux ドライバで、デバイス固有の \fBioctl\fP(2)
操作にのみ使用されるディスクリプタを返すために使われている。
-.SS "Rationale for openat() and other directory file descriptor APIs"
+.SS "openat() や他のディレクトリファイルディスクリプタ API の基本原理"
\fBopenat\fP() and the other system calls and library functions that take a
directory file descriptor argument (i.e., \fBfaccessat\fP(2),
\fBfanotify_mark\fP(2), \fBfchmodat\fP(2), \fBfchownat\fP(2), \fBfstatat\fP(2),
現在のところ、 \fBopen\fP() の呼び出し時に \fBO_ASYNC\fP を指定してシグナル駆動 I/O を有効にすることはできない。
このフラグを有効にするには \fBfcntl\fP(2) を使用すること。
-One must check for two different error codes, \fBEISDIR\fP and \fBENOENT\fP, when
-trying to determine whether the kernel supports \fBO_TMPFILE\fP functionality.
+カーネルが \fBO_TMPFILE\fP 機能をサポートしているかを判定する際に、 \fBEISDIR\fP と \fBENOENT\fP の 2
+つのエラーコードをチェックしなければならない。
.SH 関連項目
\fBchmod\fP(2), \fBchown\fP(2), \fBclose\fP(2), \fBdup\fP(2), \fBfcntl\fP(2), \fBlink\fP(2),
\fBlseek\fP(2), \fBmknod\fP(2), \fBmmap\fP(2), \fBmount\fP(2), \fBopen_by_name_at\fP(2),