OSDN Git Service

長音記号の修正を release に反映
[linuxjm/LDP_man-pages.git] / release / man2 / open.2
index 3ab35b5..ead17de 100644 (file)
@@ -80,7 +80,7 @@
 .\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
 .\" Updated 2013-08-16, Akihiro MOTOKI <amotoki@gmail.com>
 .\"
-.TH OPEN 2 2014\-04\-20 Linux "Linux Programmer's Manual"
+.TH OPEN 2 2015\-01\-22 Linux "Linux Programmer's Manual"
 .SH 名前
 open, openat, creat \- ファイルのオープン、作成を行う
 .SH 書式
@@ -116,22 +116,22 @@ _ATFILE_SOURCE
 .ad
 .PD
 .SH 説明
-ファイルの \fIpathname\fP を与えると、 \fBopen\fP()  はファイルディスクリプタを返す。
-ファイルディスクリプタは、この後に続くシステムコール (\fBread\fP(2), \fBwrite\fP(2), \fBlseek\fP(2),
-\fBfcntl\fP(2) など)  で使用される小さな非負の整数である。 このシステムコールが成功した場合に返されるファイルディスクリプタは
-そのプロセスがその時点でオープンしていないファイルディスクリプタの うち最小の数字のものとなる。
\83\95ã\82¡ã\82¤ã\83«ã\81® \fIpathname\fP ã\82\92ä¸\8eã\81\88ã\82\8bã\81¨ã\80\81 \fBopen\fP()  ã\81¯ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\82\92è¿\94ã\81\99ã\80\82
\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81¯ã\80\81ã\81\93ã\81®å¾\8cã\81«ç¶\9aã\81\8fã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83« (\fBread\fP(2), \fBwrite\fP(2), \fBlseek\fP(2),
+\fBfcntl\fP(2) ã\81ªã\81©)  ã\81§ä½¿ç\94¨ã\81\95ã\82\8cã\82\8bå°\8fã\81\95ã\81ªé\9d\9eè² ã\81®æ\95´æ\95°ã\81§ã\81\82ã\82\8bã\80\82 ã\81\93ã\81®ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81\8cæ\88\90å\8a\9fã\81\97ã\81\9få ´å\90\88ã\81«è¿\94ã\81\95ã\82\8cã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81¯
\81\9dã\81®ã\83\97ã\83­ã\82»ã\82¹ã\81\8cã\81\9dã\81®æ\99\82ç\82¹ã\81§ã\82ªã\83¼ã\83\97ã\83³ã\81\97ã\81¦ã\81\84ã\81ªã\81\84ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81® ã\81\86ã\81¡æ\9c\80å°\8fã\81®æ\95°å­\97ã\81®ã\82\82ã\81®ã\81¨ã\81ªã\82\8bã\80\82
 .PP
-デフォルトでは、新しいファイルディスクリプタは \fBexecve\fP(2) を実行した後も
\83\87ã\83\95ã\82©ã\83«ã\83\88ã\81§ã\81¯ã\80\81æ\96°ã\81\97ã\81\84ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81¯ \fBexecve\fP(2) ã\82\92å®\9fè¡\8cã\81\97ã\81\9få¾\8cã\82\82
 オープンされたままとなる (つまり、 \fBfcntl\fP(2) に説明がある \fBFD_CLOEXEC\fP
\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83\95ã\83©ã\82°ã\81¯æ\9c\80å\88\9dã\81¯ç\84¡å\8a¹ã\81§ã\81\82ã\82\8b; 後述の \fBO_CLOEXEC\fP フラグ
-を使うとこのデフォルトを変更することができる)。 ファイルオフセット
\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\83\95ã\83©ã\82°ã\81¯æ\9c\80å\88\9dã\81¯ç\84¡å\8a¹ã\81§ã\81\82ã\82\8b); 後述の \fBO_CLOEXEC\fP フラグ
+を使うとこのデフォルトを変更することができる。 ファイルオフセット
 (file offset) はファイルの先頭に設定される (\fBlseek\fP(2) 参照)。
 .PP
 \fBopen\fP()  を呼び出すと、「オープンファイル記述」 \fI(open file description)\fP
-が作成される。ファイル記述とは、システム全体の オープン中のファイルのテーブルのエントリである。 このエントリは、ファイルオフセットとファイル状態フラグ
-(\fBfcntl\fP(2)  \fBF_SETFL\fP 操作により変更可能) が保持する。 ファイルディスクリプタはこれらのエントリの一つへの参照である。
\81\93ã\81®å¾\8cã\81§ \fIpathname\fP ã\81\8cå\89\8aé\99¤ã\81\95ã\82\8cã\81\9fã\82\8aã\80\81ä»\96ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92å\8f\82ç\85§ã\81\99ã\82\8bã\82\88ã\81\86ã\81«å¤\89æ\9b´ã\81\95ã\82\8cã\81\9fã\82\8aã\81\97ã\81¦ã\82\82ã\80\81 ã\81\93ã\81®å\8f\82ç\85§ã\81¯å½±é\9f¿ã\82\92å\8f\97ã\81\91ã\81ªã\81\84ã\80\82
-新しいオープンファイル記述は最初は他のどのプロセスとも 共有されていないが、 \fBfork\fP(2)  で共有が起こる場合がある
+が作成される。ファイル記述とは、システム全体のオープン中のファイルのテーブルのエントリーである。
+このオープンファイル記述は、ファイルオフセットとファイル状態フラグ (下記参照) が保持する。
\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81¯ã\82ªã\83¼ã\83\97ã\83³ã\83\95ã\82¡ã\82¤ã\83«ã\81£è¨\98è¿°ã\81¸ã\81®å\8f\82ç\85§ã\81§ã\81\82ã\82\8bã\80\82 ã\81\93ã\81®å¾\8cã\81§ \fIpathname\fP
+が削除されたり、他のファイルを参照するように変更されたりしても、 この参照は影響を受けない。 オープンファイル記述の詳細な説明は「注意」の節を参照
 .PP
 引き数 \fIflags\fP には、アクセスモード \fBO_RDONLY\fP, \fBO_WRONLY\fP, \fBO_RDWR\fP
 のどれかひとつが入っていなければならない。 これらはそれぞれ読み込み専用、書き込み専用、読み書き用に ファイルをオープンすることを要求するものである。
@@ -155,45 +155,39 @@ flag) を 0 個以上「ビット単位の OR (bitwise\-or)」で 指定する
 は以下のリストのうち上記以外の残りのものである。 二種類のフラグの違いは、ファイル状態フラグの方はその内容を取得したり (場合によっては)
 変更したりできる点にある。詳細は \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
 .\" http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=453946
 .\" http://nfs.sourceforge.net/
 ファイルを追加 (append) モードでオープンする。 毎回の \fBwrite\fP(2)  の前に \fBlseek\fP(2)
-を行ったかのように、ファイルポインタをファイルの最後に移動する。 NFS ファイルシステムで、 \fBO_APPEND\fP
\82\92è¡\8cã\81£ã\81\9fã\81\8bã\81®ã\82\88ã\81\86ã\81«ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\83\9dã\82¤ã\83³ã\82¿ã\83¼ã\82\92ã\83\95ã\82¡ã\82¤ã\83«ã\81®æ\9c\80å¾\8cã\81«ç§»å\8b\95ã\81\99ã\82\8bã\80\82 NFS ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\81§ã\80\81 \fBO_APPEND\fP
 を使用すると、複数のプロセスがひとつのファイルに同時にデータを追加した場合、 ファイルが壊れてしまうことがある。 これは NFS
 が追加モードをサポートしていないため、 クライアントのカーネル (kernel) がそれをシミュレートしなければならないのだが、
 競合状態を避けることはできないからである。
 .TP 
 \fBO_ASYNC\fP
-シグナル駆動 I/O (signal\-driven I/O) を有効にする: このファイルディスクリプタへの
\82·ã\82°ã\83\8aã\83«é§\86å\8b\95 I/O (signal\-driven I/O) ã\82\92æ\9c\89å\8a¹ã\81«ã\81\99ã\82\8b: ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81¸ã\81®
 入力または出力が可能になった場合に、シグナルを生成する (デフォルトは \fBSIGIO\fP であるが、 \fBfcntl\fP(2)
 によって変更可能である)。 この機能が使用可能なのは端末、疑似端末、ソケットのみであり、 (Linux 2.6 以降では) パイプと FIFO
 に対しても使用できる。 さらに詳しい説明は \fBfcntl\fP(2)  を参照すること。 下記の「バグ」も参照。
 .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.
+.\" NOTE! several other man pages refer to this text
+新しいファイルディスクリプターに対して 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
@@ -209,7 +203,7 @@ this problem.)
 も指定されていない場合、 \fImode\fP は無視される。 有効なアクセス許可は、普段と同じようにプロセスの \fIumask\fP
 によって修正され、作成されたファイルの許可は \fI(mode\ &\ ~umask)\fP となる。
 このモードは、新しく作成されたファイルに対するそれ以降のアクセス にのみ適用される点に注意すること。 読み取り専用のファイルを作成する
-\fBopen\fP()  コールであっても、 読み書き可能なファイルディスクリプタを返すことがありうる。
+\fBopen\fP()  ã\82³ã\83¼ã\83«ã\81§ã\81\82ã\81£ã\81¦ã\82\82ã\80\81 èª­ã\81¿æ\9b¸ã\81\8då\8f¯è\83½ã\81ªã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\82\92è¿\94ã\81\99ã\81\93ã\81¨ã\81\8cã\81\82ã\82\8aã\81\86ã\82\8bã\80\82
 .PP
 \fImode\fP のために以下のシンボル定数が提供されている :
 .TP  9
@@ -252,30 +246,28 @@ this problem.)
 .TP 
 \fBO_DIRECT\fP (Linux 2.4.10 以降)
 このファイルに対する I/O のキャッシュの効果を最小化しようとする。このフラグを使うと、一般的に性能が低下する。
-しかしアプリケーションが独自にキャッシングを行っているような 特別な場合には役に立つ。 ファイルの I/O はユーザー空間バッファに対して直接行われる。
-\fBO_DIRECT\fP フラグ自身はデータを同期で転送しようとはするが、 \fBO_SYNC\fP
+しかしアプリケーションが独自にキャッシングを行っているような 特別な場合には役に立つ。 ファイルの I/O
+はユーザー空間バッファーに対して直接行われる。 \fBO_DIRECT\fP フラグ自身はデータを同期で転送しようとはするが、 \fBO_SYNC\fP
 フラグのようにデータと必要なメタデータの転送が保証されるわけではない。同期 I/O を保証するためには、 \fBO_DIRECT\fP に加えて
 \fBO_SYNC\fP を使用しなければならない。下記の「注意」の節の議論も参照。
 .sp
-ブロックデバイスに対する似通った意味のインターフェースが \fBraw\fP(8)  で説明されている (但し、このインタフェースは非推奨である)。
\83\96ã\83­ã\83\83ã\82¯ã\83\87ã\83\90ã\82¤ã\82¹ã\81«å¯¾ã\81\99ã\82\8bä¼¼é\80\9aã\81£ã\81\9fæ\84\8få\91³ã\81®ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹ã\81\8c \fBraw\fP(8)  ã\81§èª¬æ\98\8eã\81\95ã\82\8cã\81¦ã\81\84ã\82\8b (ä½\86ã\81\97ã\80\81ã\81\93ã\81®ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹ã\81¯é\9d\9eæ\8e¨å¥¨ã\81§ã\81\82ã\82\8b\80\82
 .TP 
 \fBO_DIRECTORY\fP
 .\" But see the following and its replies:
 .\" http://marc.theaimsgroup.com/?t=112748702800001&r=1&w=2
 .\" [PATCH] open: O_DIRECTORY and O_CREAT together should fail
 .\" O_DIRECTORY | O_CREAT causes O_DIRECTORY to be ignored.
-If \fIpathname\fP is not a directory, cause the open to fail.  This flag was
-added in kernel version 2.1.126, to avoid denial\-of\-service problems if
-\fBopendir\fP(3)  is called on a FIFO or tape device.
+\fIpathname\fP がディレクトリでなければオープンは失敗する。 このフラグは、 \fBopendir\fP(3)  が FIFO
+やテープデバイスに対してコールされた場合の サービス不能 (denial\-of\-service) 攻撃を避けるために カーネル 2.1.126
+で追加された。
 .TP 
 \fBO_DSYNC\fP
-Write operations on the file will complete according to the requirements of
-synchronized I/O \fIdata\fP integrity completion.
+ファイルに対する書き込み操作は、同期 I/O の\fIデータ\fP完全性完了の要件に基づいて行われる。
 
-By the time \fBwrite\fP(2)  (and similar)  return, the output data has been
-transferred to the underlying hardware, along with any file metadata that
-would be required to retrieve that data (i.e., as though each \fBwrite\fP(2)
-was followed by a call to \fBfdatasync\fP(2)).  \fISee NOTES below\fP.
+\fBwrite\fP(2) (や同様のコール) が返るまでに、
+書き込まれたデータおよびデータを取得するのに必要なファイルメタデータが裏で利用されているハードウェアに転送される (つまり、\fBwrite\fP(2)
+の後に \fBfdatasync\fP(2) を呼び出したのと同じようになる)。 \fI下記の「注意」も参照のこと\fP。
 .TP 
 \fBO_EXCL\fP
 この呼び出しでファイルが作成されることを保証する。このフラグが \fBO_CREAT\fP と
@@ -304,7 +296,7 @@ PID を組み合わせた名前) を作成し、 \fBlink\fP(2)  を使用して
 .TP 
 \fBO_LARGEFILE\fP
 (LFS) \fIoff_t\fP ではサイズを表せない (だだし \fIoff64_t\fP ではサイズを表せる)ファ
-イルをオープン可能にする。この定義を有効にするためには、(\fIどの\fPヘッダファイ
\82¤ã\83«ã\82\92ã\82ªã\83¼ã\83\97ã\83³å\8f¯è\83½ã\81«ã\81\99ã\82\8bã\80\82ã\81\93ã\81®å®\9a義ã\82\92æ\9c\89å\8a¹ã\81«ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\81¯ã\80\81(\fIã\81©ã\81®\fPã\83\98ã\83\83ã\83\80ã\83¼ã\83\95ã\82¡ã\82¤
 ルをインクルードするよりも前に) \fB_LARGEFILE64_SOURCE\fP マクロを定義しなければ
 ならない。
 32 ビットシステムにおいて大きなファイルにアクセスしたい場合、
@@ -333,7 +325,7 @@ PID を組み合わせた名前) を作成し、 \fBlink\fP(2)  を使用して
 .TP 
 \fBO_NONBLOCK\fP または \fBO_NDELAY\fP
 可能ならば、ファイルは非停止 (nonblocking) モードでオープンされる。
-\fBopen\fP() も、返したファイルディスクリプタに対する以後のすべての操作も呼び出
+\fBopen\fP() ã\82\82ã\80\81è¿\94ã\81\97ã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81«å¯¾ã\81\99ã\82\8b以å¾\8cã\81®ã\81\99ã\81¹ã\81¦ã\81®æ\93\8dä½\9cã\82\82å\91¼ã\81³å\87º
 したプロセスを待たせることはない。 FIFO (名前付きパイプ) を扱う場合には
 \fBfifo\fP(7) も参照すること。 強制ファイルロック (mandatory file lock) やファイ
 ルリース (file lease) と組み合わせた場合の、 \fBO_NONBLOCK\fP の効果についての
@@ -348,63 +340,58 @@ PID を組み合わせた名前) を作成し、 \fBlink\fP(2)  を使用して
 .\"    Subject: Re: [PATCH] open(2): document O_PATH
 .\"    Newsgroups: gmane.linux.man, gmane.linux.kernel
 .\"
-このフラグを指定して取得したファイルディスクリプタは、 ファイルシステムツリー内での場所を示すため、
-純粋にファイルディスクリプタレベルでの作用する操作を実行するため、 の二つの目的で使用することができる。 ファイル自身はオープンされず、
\81\93ã\81®ã\83\95ã\83©ã\82°ã\82\92æ\8c\87å®\9aã\81\97ã\81¦å\8f\96å¾\97ã\81\97ã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81¯ã\80\81 ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\83\84ã\83ªã\83¼å\86\85ã\81§ã\81®å ´æ\89\80ã\82\92示ã\81\99ã\81\9fã\82\81ã\80\81
+ç´\94ç²\8bã\81«ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\83¬ã\83\99ã\83«ã\81§ã\81®ä½\9cç\94¨ã\81\99ã\82\8bæ\93\8dä½\9cã\82\92å®\9fè¡\8cã\81\99ã\82\8bã\81\9fã\82\81ã\80\81 ã\81®äº\8cã\81¤ã\81®ç\9b®ç\9a\84ã\81§ä½¿ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\82\8bã\80\82 ã\83\95ã\82¡ã\82¤ã\83«è\87ªèº«ã\81¯ã\82ªã\83¼ã\83\97ã\83³ã\81\95ã\82\8cã\81\9aã\80\81
 他のファイル操作 (例えば \fBread\fP(2), \fBwrite\fP(2), \fBfchmod\fP(2), \fBfchown\fP(2),
 \fBfgetxattr\fP(2), \fBmmap\fP(2)) はエラー \fBEBADF\fP で失敗する。
 
-取得したファイルディスクリプタに対して以下の操作を行うことが「できる」。
\8f\96å¾\97ã\81\97ã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81«å¯¾ã\81\97ã\81¦ä»¥ä¸\8bã\81®æ\93\8dä½\9cã\82\92è¡\8cã\81\86ã\81\93ã\81¨ã\81\8cã\80\8cã\81§ã\81\8dã\82\8bã\80\8dã\80\82
 .RS
 .IP * 3
 .\" commit 332a2e1244bd08b9e3ecd378028513396a004a24
 .\" fstat(): commit 55815f70147dcfa3ead5738fd56d3574e2e3c1c2
 \fBclose\fP(2); \fBfchdir\fP(2)  (Linux 3.5 以降); \fBfstat\fP(2)  (Linux 3.6 以降)
 .IP *
-ファイルディスクリプタの複製 (\fBdup\fP(2), \fBfcntl\fP(2)  \fBF_DUPFD\fP など)
\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81®è¤\87製 (\fBdup\fP(2), \fBfcntl\fP(2)  \fBF_DUPFD\fP ã\81ªã\81©)
 .IP *
-ファイルディスクリプタフラグの取得と設定 (\fBfcntl\fP(2) の \fBF_GETFD\fP と \fBF_SETFD\fP)
\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\83\95ã\83©ã\82°ã\81®å\8f\96å¾\97ã\81¨è¨­å®\9a (\fBfcntl\fP(2) ã\81® \fBF_GETFD\fP ã\81¨ \fBF_SETFD\fP)
 .IP *
 \fBfcntl\fP(2) の \fBF_GETFL\fP 操作を使ったオープンされたファイルの状態フラグの取得。 返されるフラグには \fBO_PATH\fP
 ビットが含まれる。
-
 .IP *
-\fBopenat\fP(2) や他の "*at()" 系のシステムコールの \fIdirfd\fP 引数としてそのファイルディスクリプタを渡す。
+\fBopenat\fP(2) や他の "*at()" 系のシステムコールの \fIdirfd\fP 引数としてそのファイルディスクリプターを渡す。 これには、
+ファイルがディレクトリでない場合に \fBlinkat\fP(2) に \fBAT_EMPTY_PATH\fP が指定された場合 (や procfs 経由で
+\fBAT_SYMLINK_FOLLOW\fP が使用された場合) を含む。
 .IP *
-そのファイルディスクリプタを別のプロセスに UNIX ドメインソケット経由で渡す。 (\fBunix\fP(7) の \fBSCM_RIGHTS\fP を参照)
\81\9dã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\82\92å\88¥ã\81®ã\83\97ã\83­ã\82»ã\82¹ã\81« UNIX ã\83\89ã\83¡ã\82¤ã\83³ã\82½ã\82±ã\83\83ã\83\88çµ\8cç\94±ã\81§æ¸¡ã\81\99ã\80\82 (\fBunix\fP(7) ã\81® \fBSCM_RIGHTS\fP ã\82\92å\8f\82ç\85§)
 .RE
 .IP
-\fIflags\fP に \fBO_PATH\fP が指定された場合、 \fBO_DIRECTORY\fP と \fBO_NOFOLLOW\fP
+\fIflags\fP に \fBO_PATH\fP が指定された場合、 \fBO_CLOEXEC\fP, \fBO_DIRECTORY\fP, \fBO_NOFOLLOW\fP
 以外のフラグビットは無視される。
 
 \fIpathname\fP がシンボリックリンクで \fBO_NOFOLLOW\fP フラグも合わせて指定された場合、
\81\93ã\81®å\91¼ã\81³å\87ºã\81\97ã\81§ã\81¯ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83ªã\83³ã\82¯ã\82\92å\8f\82ç\85§ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\82\92è¿\94ã\81\99ã\80\82 ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿は、 空のパス名を指定した
\81\93ã\81®å\91¼ã\81³å\87ºã\81\97ã\81§ã\81¯ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83ªã\83³ã\82¯ã\82\92å\8f\82ç\85§ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\82\92è¿\94ã\81\99ã\80\82 ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼は、 空のパス名を指定した
 \fBfchownat\fP(2), \fBfstatat\fP(2), \fBlinkat\fP(2), \fBreadlinkat\fP(2) の呼び出しで
 \fIdirfd\fP 引数として使うことで、 そのシンボリックリンクに対して操作を行うことができる。
 .TP 
 \fBO_SYNC\fP
-Write operations on the file will complete according to the requirements of
-synchronized I/O \fIfile\fP integrity completion (by contrast with contrast
-with the synchronized I/O \fIdata\fP integrity completion provided by
-\fBO_DSYNC\fP.)
+ファイルに対する書き込み操作は、同期 I/O の\fIファイル\fP完全性完了の要件に基づいて行われる (これに対し \fBO_DSYNC\fP では同期 I/O
+の\fIデータ\fP完全性完了が提供される)。
 
-By the time \fBwrite\fP(2)  (and similar)  return, the output data and
-associated file metadata have been transferred to the underlying hardware
-(i.e., as though each \fBwrite\fP(2)  was followed by a call to \fBfsync\fP(2)).
-\fISee NOTES below\fP.
+\fBwrite\fP(2) (や同様のコール) が返るまでに、 書き込まれたデータと関連するファイルメタデータが裏で利用されているハードウェアに転送される
+(つまり、\fBwrite\fP(2) の後に \fBfsync\fP(2) を呼び出したのと同じようになる)。 \fI下記の「注意」も参照のこと\fP。
 .TP 
 \fBO_TMPFILE\fP (Linux 3.11 以降)
 .\" 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
@@ -412,7 +399,7 @@ char path[PATH_MAX];
 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",
@@ -420,36 +407,30 @@ 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
@@ -470,17 +451,17 @@ filesystems.  XFS support was added in Linux 3.15.
 
 \fIpathname\fP で指定されたパス名が絶対パスの場合、 \fIdirfd\fP は無視される。
 .SH 返り値
-\fBopen\fP(), \fBopenat\fP(), \fBcreat\fP() は新しいファイルディスクリプタを返す。 エラーが発生した場合は \-1 を返す
+\fBopen\fP(), \fBopenat\fP(), \fBcreat\fP() ã\81¯æ\96°ã\81\97ã\81\84ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\82\92è¿\94ã\81\99ã\80\82 ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81\9få ´å\90\88ã\81¯ \-1 ã\82\92è¿\94ã\81\99
 (その場合は \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 のディレクトリ部分の何れかのディレクトリに検索許可がなかった。
 またはファイルが存在せず、親ディレクトリへの書き込み許可がなかった。 (\fBpath_resolution\fP(7)  も参照すること。)
 .TP 
 \fBEDQUOT\fP
-\fBO_CREAT\fP が指定された場合で、そのファイルが存在せず、ディスクブロックか inode がそのファイルシステムのユーザクォータに達していた。
+\fBO_CREAT\fP ã\81\8cæ\8c\87å®\9aã\81\95ã\82\8cã\81\9få ´å\90\88ã\81§ã\80\81ã\81\9dã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81\8cå­\98å\9c¨ã\81\9bã\81\9aã\80\81ã\83\87ã\82£ã\82¹ã\82¯ã\83\96ã\83­ã\83\83ã\82¯ã\81\8b inode ã\81\8cã\81\9dã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\81®ã\83¦ã\83¼ã\82¶ã\83¼ã\82¯ã\82©ã\83¼ã\82¿ã\81«é\81\94ã\81\97ã\81¦ã\81\84ã\81\9fã\80\82
 .TP 
 \fBEEXIST\fP
 \fIpathname\fP は既に存在し、 \fBO_CREAT\fP と \fBO_EXCL\fP が使用された。
@@ -493,7 +474,7 @@ filesystems.  XFS support was added in Linux 3.15.
 .TP 
 \fBEINTR\fP
 遅いデバイス (例えば FIFO、 \fBfifo\fP(7)  参照) のオープンが完了するのを待って停止している間に
-システムコールがシグナルハンドラにより割り込まれた。 \fBsignal\fP(7)  参照。
\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81\8cã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81«ã\82\88ã\82\8aå\89²ã\82\8aè¾¼ã\81¾ã\82\8cã\81\9fã\80\82 \fBsignal\fP(7)  å\8f\82ç\85§ã\80\82
 .TP 
 \fBEINVAL\fP
 ファイルシステムが \fBO_DIRECT\fP フラグをサポートしていない。 詳細は\fB注意\fPを参照。
@@ -510,19 +491,18 @@ filesystems.  XFS support was added in Linux 3.15.
 が設定されている)。
 .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
-プロセスがオープンしているファイル数がすでに最大数に達している。
+プロセスがオープンしているファイル数がすでに最大数に達している (\fBgetrlimit\fP(2) の \fBRLIMIT_NOFILE\fP の説明を参照)
 .TP 
 \fBENAMETOOLONG\fP
 \fIpathname\fP が長過ぎる。
@@ -539,9 +519,8 @@ not \fBO_PATH\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
 十分なカーネルメモリーがない。
@@ -554,8 +533,8 @@ does not provide the \fBO_TMPFILE\fP functionality.
 \fIpathname\fP がディレクトリでない。
 .TP 
 \fBENXIO\fP
-\fBO_NONBLOCK\fP | \fBO_WRONLY\fP が設定されており、指定したファイルが FIFO で
-そのファイルを読み込みのためにオープンしているプロセスが存在しない。 または、ファイルがデバイススペシャルファイルで 対応するデバイスが存在しない。
+\fBO_NONBLOCK\fP | \fBO_WRONLY\fP が設定されており、指定したファイルが FIFO で そのファイルを読み込み用でオープンしている
+FIFO が存在しない。 または、ファイルがデバイススペシャルファイルで 対応するデバイスが存在しない。
 .TP 
 \fBEOPNOTSUPP\fP
 \fIpathname\fP を含んでいるファイルシステムが \fBO_TMPFILE\fP をサポートしていない。
@@ -566,7 +545,7 @@ does not provide the \fBO_TMPFILE\fP functionality.
 .\" Reported 2006-10-03
 \fIpathname\fP が参照しているのが、大き過ぎてオープンできない通常のファイルである。 通常、このエラーが発生するは、32
 ビットプラットフォーム上で \fI\-D_FILE_OFFSET_BITS=64\fP を指定せずにコンパイルされたアプリケーションが、ファイルサイズが
-\fI(2<31)\-1\fP ビットを超えるファイルを開こうとした場合である。 上記の \fBO_LARGEFILE\fP も参照。 これは
+\fI(1<31)\-1\fP バイトを超えるファイルを開こうとした場合である。 上記の \fBO_LARGEFILE\fP も参照。 これは
 POSIX.1\-2001 で規定されているエラーである。 2.6.24 より前のカーネルでは、Linux はこの場合にエラー \fBEFBIG\fP
 を返していた。
 .TP 
@@ -575,6 +554,9 @@ POSIX.1\-2001 で規定されているエラーである。 2.6.24 より前の
 \fBO_NOATIME\fP フラグが指定されたが、呼び出し元の実効ユーザー ID が ファイルの所有者と一致せず、かつ呼び出し元に特権
 (\fBCAP_FOWNER\fP)  がない。
 .TP 
+\fBEPERM\fP
+操作が file seal により禁止されている。 \fBfcntl\fP(2)  参照。
+.TP 
 \fBEROFS\fP
 \fIpathname\fP が読み込み専用のファイルシステム上のファイルを参照しており、 書き込みアクセスが要求された。
 .TP 
@@ -587,10 +569,10 @@ POSIX.1\-2001 で規定されているエラーである。 2.6.24 より前の
 \fBopenat\fP() では以下のエラーも発生する。
 .TP 
 \fBEBADF\fP
-\fIdirfd\fP が有効なファイルディスクリプタではない。
+\fIdirfd\fP ã\81\8cæ\9c\89å\8a¹ã\81ªã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81§ã\81¯ã\81ªã\81\84ã\80\82
 .TP 
 \fBENOTDIR\fP
-\fIpathname\fP が相対パスで、 \fIdirfd\fP がディレクトリ以外のファイルを参照しているファイルディスクリプタである。
+\fIpathname\fP が相対パス名で、 \fIdirfd\fP がディレクトリ以外のファイルを参照しているファイルディスクリプターである。
 .SH バージョン
 \fBopenat\fP()  はカーネル 2.6.16 で Linux に追加された。 ライブラリによるサポートはバージョン 2.4 で glibc
 に追加された。
@@ -602,19 +584,16 @@ POSIX.1\-2001 で規定されているエラーである。 2.6.24 より前の
 フラグ \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)  のためのファイルディスクリプタを取得するために、
+å¿\85ã\81\9aã\81\97ã\82\82ã\81ªã\81\84ã\81\93ã\81¨ã\82\92æ\84\8få\91³ã\81\99ã\82\8bã\80\82 ã\81\93ã\82\8cã\81¯ \fBioctl\fP(2)  ã\81®ã\81\9fã\82\81ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\82\92å\8f\96å¾\97ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\80\81
 デバイスをオープンするときによく用いられる。
 
 .LP
@@ -635,57 +614,62 @@ Linux では、 \fBO_NONBLOCK\fP フラグは、 open を実行したいが read
 (それぞれ最終アクセス時刻、最終状態変更時刻、最終修正時刻である。 \fBstat\fP(2)  参照) が現在時刻に設定される。 さらに親ディレクトリの
 \fIst_ctime\fP と \fIst_mtime\fP も現在時刻に設定される。 それ以外の場合で、O_TRUNC フラグでファイルが修正されたときは、
 ファイルの \fIst_ctime\fP と \fIst_mtime\fP フィールドが現在時刻に設定される。
-.SS "Synchronized I/O"
-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
-implementation supports this option, it must at least support the use of
-\fBO_SYNC\fP for regular files.
-
-Linux implements \fBO_SYNC\fP and \fBO_DSYNC\fP, but not \fBO_RSYNC\fP.  (Somewhat
-incorrectly, glibc defines \fBO_RSYNC\fP to have the same value as \fBO_SYNC\fP.)
-
-\fBO_SYNC\fP provides synchronized I/O \fIfile\fP integrity completion, meaning
-write operations will flush data and all associated metadata to the
-underlying hardware.  \fBO_DSYNC\fP provides synchronized I/O \fIdata\fP integrity
-completion, meaning write operations will flush data to the underlying
-hardware, but will only flush metadata updates that are required to allow a
-subsequent read operation to complete successfully.  Data integrity
-completion can reduce the number of disk operations that are required for
-applications that don't need the guarantees of file integrity completion.
-
-To understand the difference between the the two types of completion,
-consider two pieces of file metadata: the file last modification timestamp
-(\fIst_mtime\fP)  and the file length.  All write operations will update the
-last file modification timestamp, but only writes that add data to the end
-of the file will change the file length.  The last modification timestamp is
-not needed to ensure that a read completes successfully, but the file length
-is.  Thus, \fBO_DSYNC\fP would only guarantee to flush updates to the file
-length metadata (whereas \fBO_SYNC\fP would also always flush the last
-modification timestamp metadata).
-
-Before Linux 2.6.33, Linux implemented only the \fBO_SYNC\fP flag for
-\fBopen\fP().  However, when that flag was specified, most filesystems actually
-provided the equivalent of synchronized I/O \fIdata\fP integrity completion
-(i.e., \fBO_SYNC\fP was actually implemented as the equivalent of \fBO_DSYNC\fP).
+.SS オープンファイル記述
+オープンファイル記述という用語は POSIX
+で使用されている用語で、オープンされているファイルのシステム共通のテーブルのエントリーを参照するものである。
+別の文脈では、このオブジェクトはいろいろな呼び方があり、
+「オープンファイルオブジェクト」、「ファイルハンドル」、「オープンファイルテーブルエントリー」、 カーネル開発者の用語では \fIstruct file\fP
+などと呼ばれる。
+
+ファイルディスクリプターが (\fBdup\fP(2) や同様のシステムコールを使って) 複製される際に、
+複製されたファイルディスクリプターは元のファイルディスクリプターと同じオープンファイル記述を参照する。 結果として 2
+つのファイルディスクリプターはファイルオフセットとファイル状態フラグを共有する。 このような共有はプロセス間でも起こり得る。 \fBfork\fP(2)
+で作成された子プロセスは親プロセスのファイルディスクリプターの複製を継承し、これらの複製は同じオープンファイル記述を参照する。
 
 .\"
 .\"
-Since Linux 2.6.33, proper \fBO_SYNC\fP support is provided.  However, to
-ensure backward binary compatibility, \fBO_DSYNC\fP was defined with the same
-value as the historical \fBO_SYNC\fP, and \fBO_SYNC\fP was defined as a new
-(two\-bit) flag value that includes the \fBO_DSYNC\fP flag value.  This ensures
-that applications compiled against new headers get at least \fBO_DSYNC\fP
-semantics on pre\-2.6.33 kernels.
+1 つのファイルに対して \fBopen\fP(2) を行う毎に、新しいオープンファイル記述が作成される。 したがって、 1 つのファイル inode
+に対して複数のオープンファイル記述が存在することがありえる。
+.SS "同期 I/O"
+POSIX.1\-2008 の「同期 I/O」の選択肢として複数種類が規定されており、 動作を制御するために \fBopen\fP() フラグとして
+\fBO_SYNC\fP, \fBO_DSYNC\fP, \fBO_RSYNC\fP が規定されている。 この選択肢を実装がサポートしているかに関わらず、
+各実装では少なくとも通常のファイルに対して \fBO_SYNC\fP が利用できなければならない。
+
+Linux は \fBO_SYNC\fP と \fBO_DSYNC\fP を実装しているが、 \fBO_RSYNC\fP は実装していない (少し間違っているのだが、
+glibc では \fBO_RSYNC\fP が \fBO_SYNC\fP と同じ値で定義されている)。
+
+\fBO_SYNC\fP は、 同期 I/O での\fIファイル\fP完全性完了を提供する。 つまり、
+書き込み操作はデータとすべての関連メタデータを裏で利用されているハードウェアにフラッシュすることを意味する。 \fBO_DSYNC\fP は、 同期 I/O
+での\fIデータ\fP完全性完了を提供する。 つまり、 書き込み操作はデータを裏で利用されているハードウェアにフラッシュするが、
+それ以降の読み出し操作が正常に完了するのに必要なメタデータの更新のみをフラッシュする。 データ完全性完了は、
+ファイル完全性完了を必要としないアプリケーションで、 ディスク操作の数を減らすことができる。
+
+2 種類の完了の違いを理解するために、 ファイルメタデータの 2 つの要素、 ファイルの最終修正時刻 (\fIst_mtime\fP)
+とファイル長、を考える。 すべての書き込み操作は最終修正時刻を更新するが、 ファイルの末尾にデータを追加する書き込み操作のみがファイル長を変更する。
+最終修正時刻は、 読み出しが正常に完了するのに必要ではないが、 ファイル長は必要である。 したがって、 \fBO_DSYNC\fP
+はファイル長のメタデータの更新がフラッシュされることだけを保証する (これに対して \fBO_SYNC\fP
+では最終修正時刻のメタデータも常にフラッシュされる)。
+
+Linux 2.6.33 より前では、 Linux は \fBopen\fP() では \fBO_SYNC\fP フラグのみを実装していた。 しかしながら、
+このフラグが指定された場合、 ほとんどのファイルシステムで提供されていたのは実際には同期 I/O での\fIデータ\fP完全性完了と等価なものであった
+(つまり、 \fBO_SYNC\fP は実際には \fBO_DSYNC\fP と等価なものとして実装されていた)。
+
+.\"
+.\"
+Linux 2.6.33 行こう では、 正しい \fBO_SYNC\fP のサポートが提供されている。 しかしながら、
+バイナリレベルの後方互換性を保証するため、 \fBO_DSYNC\fP は以前の \fBO_SYNC\fP と同じ値で定義されており、 \fBO_SYNC\fP は
+\fBO_DSYNC\fP フラグの値を含む新しい (2 ビットの) フラグ値として定義されている。 これにより、
+新しいヘッダーを使ってコンパイルされたアプリケーションで、 2.6.33 より前のカーネルで少なくとも \fBO_DSYNC\fP
+の動作は同じになることが保証される。
 .SS NFS
 NFS を実現しているプロトコルには多くの不備があり、特に \fBO_SYNC\fP と \fBO_NDELAY\fP に影響する。
 
 .\"
 .\"
-UID マッピングを使用している NFS ファイルシステムでは、 \fBopen\fP()  がファイルディスクリプタを返した場合でも \fBread\fP(2)
+UID ã\83\9eã\83\83ã\83\94ã\83³ã\82°ã\82\92使ç\94¨ã\81\97ã\81¦ã\81\84ã\82\8b NFS ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\81§ã\81¯ã\80\81 \fBopen\fP()  ã\81\8cã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\82\92è¿\94ã\81\97ã\81\9få ´å\90\88ã\81§ã\82\82 \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 |
@@ -699,62 +683,64 @@ O_WRONLY\fP の組み合わせは論理的に間違いであり、確かに \fBO
 .\"
 .\"
 Linux では、特別な、非標準なアクセスモードとして 3 (バイナリでは 11) が 予約されており \fIflags\fP に指定できる。
-このアクセスモードを指定すると、ファイルの読み出し/書き込み許可をチェックし、 読み出しにも書き込みにも使用できないディスクリプタを返す。
\81\93ã\81®ã\82¢ã\82¯ã\82»ã\82¹ã\83¢ã\83¼ã\83\89ã\82\92æ\8c\87å®\9aã\81\99ã\82\8bã\81¨ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\81®èª­ã\81¿å\87ºã\81\97\9b¸ã\81\8dè¾¼ã\81¿è¨±å\8f¯ã\82\92ã\83\81ã\82§ã\83\83ã\82¯ã\81\97ã\80\81 èª­ã\81¿å\87ºã\81\97ã\81«ã\82\82æ\9b¸ã\81\8dè¾¼ã\81¿ã\81«ã\82\82使ç\94¨ã\81§ã\81\8dã\81ªã\81\84ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\82\92è¿\94ã\81\99ã\80\82
 この非標準のアクセスモードはいくつかの Linux ドライバで、デバイス固有の \fBioctl\fP(2)
-操作にのみ使用されるディスクリプタを返すために使われている。
-.SS "Rationale for openat() and other directory file descriptor APIs"
-\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),
-\fBfutimesat\fP(2), \fBlinkat\fP(2), \fBmkdirat\fP(2), \fBmknodat\fP(2),
+操作にのみ使用されるディスクリプターを返すために使われている。
+.SS "openat() や他のディレクトリファイルディスクリプター API の基本原理"
+\fBopenat\fP() やディレクトリファイルディスクリプターを引き数を取る他のシステムコールやライブラリ関数 (\fBexecveat\fP(2),
+\fBfaccessat\fP(2), \fBfanotify_mark\fP(2), \fBfchmodat\fP(2), \fBfchownat\fP(2),
+\fBfstatat\fP(2), \fBfutimesat\fP(2), \fBlinkat\fP(2), \fBmkdirat\fP(2), \fBmknodat\fP(2),
 \fBname_to_handle_at\fP(2), \fBreadlinkat\fP(2), \fBrenameat\fP(2), \fBsymlinkat\fP(2),
-\fBunlinkat\fP(2), \fButimensat\fP(2)  \fBmkfifoat\fP(3), and \fBscandirat\fP(3))  are
-supported for two reasons.  Here, the explanation is in terms of the
-\fBopenat\fP()  call, but the rationale is analogous for the other interfaces.
-
-First, \fBopenat\fP()  allows an application to avoid race conditions that
-could occur when using \fBopen\fP()  to open files in directories other than
-the current working directory.  These race conditions result from the fact
-that some component of the directory prefix given to \fBopen\fP()  could be
-changed in parallel with the call to \fBopen\fP().  Such races can be avoided
-by opening a file descriptor for the target directory, and then specifying
-that file descriptor as the \fIdirfd\fP argument of \fBopenat\fP().
+\fBunlinkat\fP(2), \fButimensat\fP(2) \fBmkfifoat\fP(3), \fBscandirat\fP(3))
+は二つの理由から用意されている。 ここでは、 \fBopenat\fP コールに関して説明するが、この基本原理は他のインターフェースでも同じである。
+
+最初の理由として、 \fBopenat\fP() を使うと、 アプリケーションは、 カレントワーキングディレクトリ以外のディレクトリで \fBopen\fP()
+を使ってファイルをオープンする際に起こり得る競合条件を避けることができる。 これらの競合条件は、 \fBopen\fP()
+に渡されたディレクトリプレフィックスの構成要素が \fBopen\fP() の呼び出しと並行して変化する可能性があるという点に由来している。 例えば、ファイル
+\fIpath/to/xxx\fP が存在する場合にファイル \fIpath/to/xxx.dep\fP を作成したいとする。
+問題は、存在確認とファイル作成の間に、 \fIpath\fP や \fIto\fP (シンボリックリンクでもよい)
+が別の場所を指すように変更されることがあるということだ。 このような競合条件は、 対象のディレクトリに対するファイルディスクリプターをオープンし、
+それから \fBfstatat\fP(2) や \fBopenat\fP() の \fIdirfd\fP 引き数としてそのファイルディスクリプターを指定することで、
+避けることができる。
 
 .\"
 .\"
-Second, \fBopenat\fP()  allows the implementation of a per\-thread "current
-working directory", via file descriptor(s) maintained by the application.
-(This functionality can also be obtained by tricks based on the use of
-\fI/proc/self/fd/\fPdirfd, but less efficiently.)
+二つ目として、 \fBopenat\fP() を使うと、アプリケーションが管理するファイルディスクリプターにより、
+スレッド単位の「カレントワーキングディレクトリ」を実装することができる (この機能は、 \fI/proc/self/fd/dirfd\fP
+を使った方法でも実現することができるが、 効率の面で落とる)。
 .SS O_DIRECT
 .LP
-\fBO_DIRECT\fP フラグを使用する場合、ユーザ空間バッファの長さやアドレス、 I/O
+\fBO_DIRECT\fP フラグを使用する場合、ユーザー空間バッファーの長さやアドレス、 I/O
 のファイルオフセットに関してアラインメントの制限が課されることがある。 Linux では、アラインメントの制限はファイルシステムやカーネルのバージョンに
 よって異なり、全く制限が存在しない場合もある。 しかしながら、現在のところ、指定されたファイルやファイルシステムに対して
-こうした制限があるかを見つけるための、アプリケーション向けのインタフェースで ファイルシステム非依存のものは存在しない。
-いくつかのファイルシステムでは、制限を確認するための独自のインタフェースが 提供されている。例えば、 \fBxfsctl\fP(3)  の
\81\93ã\81\86ã\81\97ã\81\9få\88¶é\99\90ã\81\8cã\81\82ã\82\8bã\81\8bã\82\92è¦\8bã\81¤ã\81\91ã\82\8bã\81\9fã\82\81ã\81®ã\80\81ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³å\90\91ã\81\91ã\81®ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹ã\81§ ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 é\9d\9eä¾\9då­\98ã\81®ã\82\82ã\81®ã\81¯å­\98å\9c¨ã\81\97ã\81ªã\81\84ã\80\82
\81\84ã\81\8fã\81¤ã\81\8bã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\81§ã\81¯ã\80\81å\88¶é\99\90ã\82\92確èª\8dã\81\99ã\82\8bã\81\9fã\82\81ã\81®ç\8b¬è\87ªã\81®ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹ã\81\8c æ\8f\90ä¾\9bã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\80\82ä¾\8bã\81\88ã\81°ã\80\81 \fBxfsctl\fP(3)  ã\81®
 \fBXFS_IOC_DIOINFO\fP 命令である。
 .LP
-Linux 2.4 では、転送サイズ、 ユーザーバッファのアラインメント、ファイルオフセットは、
-ファイルシステムの論理ブロックサイズの倍数でなければならない。 Linux 2.6 では、512 バイトごとの境界に配置されていれば充分である。
+Linux 2.4 では、転送サイズ、 ユーザーバッファーのアライメント、ファイルオフセットは、
+ファイルシステムの論理ブロックサイズの倍数でなければならない。 Linux 2.6.0 以降では、
+内部で使われるストレージの論理ブロックサイズのアライメント (通常は 512 バイト) で十分である。 論理ブロックサイズは \fBioctl\fP(2)
+\fBBLKSSZGET\fP 操作や以下のシェルコマンドから知ることができる。
+
+    blockdev \-\-getss
 .LP
\83¡ã\83¢ã\83ªã\83\90ã\83\83ã\83\95ã\82¡がプライベートマッピング (\fBmmap\fP(2) の \fBMAP_PRIVATE\fP
\83¡ã\83¢ã\83ªã\83¼ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼がプライベートマッピング (\fBmmap\fP(2) の \fBMAP_PRIVATE\fP
 フラグで作成されたマッピング) の場合には、\fBO_DIRECT\fP I/O は
 \fBfork\fP(2) システムコールと同時に決して実行すべきではない
-(プライベートマッピングには、ヒープ領域に割り当てられたメモリや静的に
-割り当てたバッファも含まれる)。非同期 I/O インターフェース (AIO) 経由
+(ã\83\97ã\83©ã\82¤ã\83\99ã\83¼ã\83\88ã\83\9eã\83\83ã\83\94ã\83³ã\82°ã\81«ã\81¯ã\80\81ã\83\92ã\83¼ã\83\97é \98å\9f\9fã\81«å\89²ã\82\8aå½\93ã\81¦ã\82\89ã\82\8cã\81\9fã\83¡ã\83¢ã\83ªã\83¼ã\82\84é\9d\99ç\9a\84ã\81«
\89²ã\82\8aå½\93ã\81¦ã\81\9fã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\82\82å\90«ã\81¾ã\82\8cã\82\8b\80\82é\9d\9eå\90\8cæ\9c\9f I/O ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹ (AIO) çµ\8cç\94±
 やプロセス内の他のスレッドから発行された、このような I/O は、
 \fBfork\fP(2) が呼び出される前に完了されるべきである。
 そうしなかった場合、データ破壊や、親プロセスや子プロセスでの予期しない
 動作が起こる可能性がある。
-\fBO_DIRECT\fP I/O ç\94¨ã\81®ã\83¡ã\83¢ã\83ªã\83\90ã\83\83ã\83\95ã\82¡が \fBshmat\fP(2) や\fBMAP_SHARED\fP フラグ
+\fBO_DIRECT\fP I/O ç\94¨ã\81®ã\83¡ã\83¢ã\83ªã\83¼ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼が \fBshmat\fP(2) や\fBMAP_SHARED\fP フラグ
 付きの \fBmmap\fP(2) で作成された場合には、この制限はあてはまらない。
-\fBmadvise\fP(2) ã\81§ã\83¡ã\83¢ã\83ªã\83\90ã\83\83ã\83\95ã\82¡にアドバイス \fBMADV_DONTFORK\fP が設定され
-ている場合にも、この制限はあてはまらない(\fBMADV_DONTFORK\fP はそのメモリ
-バッファが \fBfork\fP(2) 後に子プロセスからは利用できないことを保証するも
+\fBmadvise\fP(2) ã\81§ã\83¡ã\83¢ã\83ªã\83¼ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼にアドバイス \fBMADV_DONTFORK\fP が設定され
+ている場合にも、この制限はあてはまらない(\fBMADV_DONTFORK\fP はそのメモリ
\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81\8c \fBfork\fP(2) å¾\8cã\81«å­\90ã\83\97ã\83­ã\82»ã\82¹ã\81\8bã\82\89ã\81¯å\88©ç\94¨ã\81§ã\81\8dã\81ªã\81\84ã\81\93ã\81¨ã\82\92ä¿\9d証ã\81\99ã\82\8bã\82\82
 のである)。
 .LP
-\fBO_DIRECT\fP フラグは SGI IRIX で導入された。SGI IRIX にも Linux 2.4 と同様の (ユーザーバッファの)
+\fBO_DIRECT\fP ã\83\95ã\83©ã\82°ã\81¯ SGI IRIX ã\81§å°\8eå\85¥ã\81\95ã\82\8cã\81\9fã\80\82SGI IRIX ã\81«ã\82\82 Linux 2.4 ã\81¨å\90\8cæ§\98ã\81® (ã\83¦ã\83¼ã\82¶ã\83¼ã\83\90ã\83\83ã\83\95ã\82¡ã\83¼ã\81®)
 アラインメントの制限がある。 また、IRIX には適切な配置とサイズを取得するための \fBfcntl\fP(2)  コールがある。 FreeBSD 4.x
 も同じ名前のフラグを導入したが、アラインメントの制限はない。
 .LP
@@ -781,7 +767,7 @@ NFS で \fBO_DIRECT\fP を使った場合の動作はローカルのファイル
 をデフォルトでは無効になっている性能向上のためのオプションと 考えておくのがよいであろう。
 .PP
 .RS
-「O_DIRECT でいつも困るのは、インタフェース全部が本当にお馬鹿な点だ。 たぶん危ないマインドコントロール剤で
\80\8cO_DIRECT ã\81§ã\81\84ã\81¤ã\82\82å\9b°ã\82\8bã\81®ã\81¯ã\80\81ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹å\85¨é\83¨ã\81\8cæ\9c¬å½\93ã\81«ã\81\8a馬鹿ã\81ªç\82¹ã\81 ã\80\82 ã\81\9fã\81¶ã\82\93å\8d±ã\81ªã\81\84ã\83\9eã\82¤ã\83³ã\83\89ã\82³ã\83³ã\83\88ã\83­ã\83¼ã\83«å\89¤ã\81§
 頭がおかしくなったサルが設計したんじゃないかな」 \(em Linus
 .RE
 .SH バグ
@@ -790,14 +776,14 @@ NFS で \fBO_DIRECT\fP を使った場合の動作はローカルのファイル
 現在のところ、 \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),
+\fBlseek\fP(2), \fBmknod\fP(2), \fBmmap\fP(2), \fBmount\fP(2), \fBopen_by_handle_at\fP(2),
 \fBread\fP(2), \fBsocket\fP(2), \fBstat\fP(2), \fBumask\fP(2), \fBunlink\fP(2),
 \fBwrite\fP(2), \fBfopen\fP(3), \fBfifo\fP(7), \fBpath_resolution\fP(7), \fBsymlink\fP(7)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.65 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。