\fBF_DUPFD\fP と同様だが、それに加えて複製されたディスクリプタに対して close\-on\-exec フラグをセットする。
このフラグを指定することで、プログラムは \fBFD_CLOEXEC\fP フラグをセットするために \fBfcntl\fP() の \fBF_SETFD\fP
操作を追加で行う必要がなくなる。 このフラグがなぜ有用かについては、 \fBopen\fP(2) の \fBO_CLOEXEC\fP の説明を参照のこと。
-.SS ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83»ã\83\95ã\83©ã\82°
+.SS ファイルディスクリプタフラグ
以下のコマンドを使って、ファイルディスクリプタに関連するフラグ を操作することができる。 現在のところ、定義されているフラグは一つだけである:
\fBFD_CLOEXEC\fP (close\-on\-exec フラグ)。 \fBFD_CLOEXEC\fP ビットが 0 なら、ファイルディスクリプタは
\fBexecve\fP(2) を行ってもオープンされたままだが、そうでない場合はクローズされる。
.TP
\fBF_GETFD\fP (\fIvoid\fP)
-ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83»ã\83\95ã\83©ã\82°ã\82\92èªã\81¿å\87ºã\81\99ã\80\82 \fIarg\fP ã\81¯ç\84¡è¦\96ã\81\95ã\82\8cã\82\8bã\80\82
+ファイルディスクリプタフラグを読み出す。 \fIarg\fP は無視される。
.TP
\fBF_SETFD\fP (\fIint\fP)
-ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83»ã\83\95ã\83©ã\82°ã\81« \fIarg\fP ã\81§æ\8c\87å®\9aã\81\97ã\81\9få\80¤ã\82\92è¨å®\9aã\81\99ã\82\8bã\80\82
+ファイルディスクリプタフラグに \fIarg\fP で指定した値を設定する。
.SS ファイル状態フラグ
.\" or
.\" .BR creat (2),
\fBO_WRONLY\fP, \fBO_RDWR\fP) とファイル作成フラグ (すなわち \fBO_CREAT\fP, \fBO_EXCL\fP,
\fBO_NOCTTY\fP, \fBO_TRUNC\fP) に関するビットは無視される。 Linux では、このコマンドで変更できるのは
\fBO_APPEND\fP, \fBO_ASYNC\fP, \fBO_DIRECT\fP, \fBO_NOATIME\fP, \fBO_NONBLOCK\fP フラグだけである。
-.SS ã\82¢ã\83\89ã\83\90ã\82¤ã\82¶ã\83ªã\83»ã\83ã\83\83ã\82¯
-\fBF_GETLK\fP, \fBF_SETLK\fP, \fBF_SETLKW\fP ã\81¯ã\80\81ã\83¬ã\82³ã\83¼ã\83\89ã\83»ã\83ã\83\83ã\82¯ã\81®ç\8d²å¾\97ï¼\8f解æ\94¾ï¼\8fã\83\86ã\82¹ã\83\88ã\81®ã\81\9fã\82\81ã\81«ä½¿ç\94¨ã\81\99ã\82\8b
-(ã\83¬ã\82³ã\83¼ã\83\89ã\83»ã\83ã\83\83ã\82¯ã\81¯ã\83\95ã\82¡ã\82¤ã\83«ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\83»ロックや ファイル領域ロックとも呼ばれる)。 三番目の引き数 \fIlock\fP
+.SS アドバイザリロック
+\fBF_GETLK\fP, \fBF_SETLK\fP, \fBF_SETLKW\fP は、レコードロックの獲得/解放/テストのために使用する
+(ã\83¬ã\82³ã\83¼ã\83\89ã\83ã\83\83ã\82¯ã\81¯ã\83\95ã\82¡ã\82¤ã\83«ã\82»ã\82°ã\83¡ã\83³ã\83\88ロックや ファイル領域ロックとも呼ばれる)。 三番目の引き数 \fIlock\fP
は、以下に示すフィールドを含む構造体へのポインタである (フィールドの順序は関係なく、構造体に他のフィールドがあってもよい)。
.in +4n
.nf
の場合はファイルの末尾からのオフセットと解釈される。 後ろの2つの場合には、 ファイルの先頭より前にならない範囲で、 \fIl_start\fP
に負の値を指定することができる。
-\fIl_len\fP specifies the number of bytes to be locked. If \fIl_len\fP is
-positive, then the range to be locked covers bytes \fIl_start\fP up to and
-including \fIl_start\fP+\fIl_len\fP\-1. Specifying 0 for \fIl_len\fP has the special
-meaning: lock all bytes starting at the location specified by \fIl_whence\fP
-and \fIl_start\fP through to the end of file, no matter how large the file
-grows.
+\fIl_len\fP はロックしたいバイト数を示す。 \fIl_len\fP が正の場合、ロックされるバイト範囲は \fIl_start\fP 以上
+\fIl_start\fP+\fIl_len\fP\-1 以下となる。 \fIl_len\fP に 0 を指定した場合は特別な意味を持つ: \fIl_whence\fP and
+\fIl_start\fP で指定される位置からファイルの末尾までの全てのバイトをロックする
+(ファイルがどんなに大きくなったとしてもファイルの末尾までロックする)。
POSIX.1\-2001 では、負の値の \fIl_len\fP をサポートする実装を認めている (必須ではない)。 \fIl_len\fP
が負の場合、ロックされるバイト範囲は \fIl_start\fP+\fIl_len\fP 以上 \fIl_start\fP\-1 以下となる。 この動作はカーネル
\fBstdio\fP(3) ではバッファリングが行われるので、 stdio 関連の関数ではレコードのロックの使用は回避される; 代わりに
\fBread\fP(2) や \fBwrite\fP(2) を使用すること。
.SS "強制ロック (mandatory locking)"
-ä¸\8aè¿°ã\81®ã\83ã\83\83ã\82¯ã\81«ã\81¯ã\82¢ã\83\89ã\83\90ã\82¤ã\82¶ã\83ªã\83»ã\83ã\83\83ã\82¯ (advisory lock) ã\81¨å¼·å\88¶ã\83ã\83\83ã\82¯ (mandatory lock)
-ã\81®äº\8c種é¡\9eã\81\8cã\81\82ã\82\8bã\81\8cã\80\81ã\83\87ã\83\95ã\82©ã\83«ã\83\88ã\81§ã\81¯ã\82¢ã\83\89ã\83\90ã\82¤ã\82¶ã\83ªã\83»ã\83ã\83\83ã\82¯ã\81¨ã\81ªã\82\8bã\80\82
+上述のロックにはアドバイザリロック (advisory lock) と強制ロック (mandatory lock)
+の二種類があるが、デフォルトではアドバイザリロックとなる。
-ã\82¢ã\83\89ã\83\90ã\82¤ã\82¶ã\83ªã\83»ã\83ã\83\83ã\82¯ã\81«å¼·å\88¶å\8a\9bã\81¯ã\81ªã\81\8fã\80\81å\8d\94調ã\81\97ã\81¦å\8b\95ä½\9cã\81\99ã\82\8bã\83\97ã\83ã\82»ã\82¹é\96\93ã\81§ã\81®ã\81¿ æ\9c\89å\8a¹ã\81§ã\81\82ã\82\8bã\80\82
+アドバイザリロックに強制力はなく、協調して動作するプロセス間でのみ 有効である。
強制ロックは全てのプロセスに対して効果がある。 あるプロセスが互換性のない強制ロックが適用されたファイル領域に対して (\fBread\fP(2) や
\fBwrite\fP(2) により) 互換性のないアクセスを実行しようとした場合、 アクセスの結果は そのファイルのオープンファイル記述で
フラグが有効になっていないときは、ロックが削除されるか、 ロックがアクセスと互換性のあるモードに変換されるまで、 システムコールは停止 (block)
される。 \fBO_NONBLOCK\fP フラグが有効になっているときは、システムコールはエラー \fBEAGAIN\fP で失敗する。
-To make use of mandatory locks, mandatory locking must be enabled both on
-the filesystem that contains the file to be locked, and on the file itself.
-Mandatory locking is enabled on a filesystem using the "\-o mand" option to
-\fBmount\fP(8), or the \fBMS_MANDLOCK\fP flag for \fBmount\fP(2). Mandatory locking
-is enabled on a file by disabling group execute permission on the file and
-enabling the set\-group\-ID permission bit (see \fBchmod\fP(1) and \fBchmod\fP(2)).
+強制ロックを使用するためには、ロック対象のファイルが含まれるファイルシステム
+と、ロック対象のファイル自身の両方について、強制ロックが有効になっていなけれ ばならない。ファイルシステムについて強制ロックを有効にするには、
+\fBmount\fP(8) に "\-o mand" オプションを渡すか、 \fBmount\fP(2) に \fBMS_MANDLOCK\fP
+フラグを指定する。ファイルについて強制ロックを有効にするには、 そのファイルのグループ実行許可 (group execute permission)
+を無効とし、 かつ set\-group\-ID 許可ビットを有効にする (\fBchmod\fP(1) と \fBchmod\fP(2) を参照)。
Linux の強制ロックの実装は信頼性に欠けるものである。 下記の「バグ」の節を参照のこと。
.SS シグナルの管理
.\" kill_fasync()/send_sigio()/send_sigio_to_task()
.\" to directly call send_group_sig_info()
.\" -- MTK, Apr 2005 (kernel 2.6.11)
-ã\82¹ã\83¬ã\83\83ã\83\89ã\82°ã\83«ã\83¼ã\83\97ã\82\92ã\82µã\83\9dã\83¼ã\83\88ã\81\97ã\81¦ã\81\84ã\82\8bã\82¹ã\83¬ã\83\83ã\83\89ã\83©ã\82¤ã\83\96ã\83©ã\83ª (ä¾\8bã\81\88ã\81° NPTL) ã\82\92 使ã\81£ã\81¦å\8b\95ä½\9cã\81\97ã\81¦ã\81\84ã\82\8bã\83\9eã\83«ã\83\81ã\82¹ã\83¬ã\83\83ã\83\89ã\83»ã\83\97ã\83ã\82»ã\82¹ã\81§ \fBF_SETSIG\fP ã\81«
+スレッドグループをサポートしているスレッドライブラリ (例えば NPTL) を 使って動作しているマルチスレッドプロセスで \fBF_SETSIG\fP に
0 以外の値を指定した場合、 \fBF_SETOWN\fP に正の値を渡すと、その意味が違ってくる: プロセス全体を示すプロセスID
ではなく、プロセス内の特定の スレッドを示すスレッドID と解釈される。 したがって、 \fBF_SETSIG\fP
を使う場合には、きちんと結果を受け取るには、 \fBF_SETOWN\fP に渡す値を \fBgetpid\fP(2) ではなく \fBgettid\fP(2)
-ã\81®è¿\94ã\82\8aå\80¤ã\81«ã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8bã\81 ã\82\8dã\81\86ã\80\82 (ç\8f¾ç\8a¶ã\81® Linux ã\82¹ã\83¬ã\83\83ã\83\89å®\9fè£\85ã\81§ã\81¯ã\80\81ã\83¡ã\82¤ã\83³ã\83»ã\82¹ã\83¬ã\83\83ã\83\89ã\81®ã\82¹ã\83¬ã\83\83ã\83\89ID ã\81¯ ã\81\9dã\81®ã\82¹ã\83¬ã\83\83ã\83\89ã\81®ã\83\97ã\83ã\82»ã\82¹ID
-ã\81¨å\90\8cã\81\98ã\81§ã\81\82ã\82\8bã\80\82ã\81¤ã\81¾ã\82\8aã\80\81 ã\82·ã\82°ã\83\8aã\83«ã\83»ã\82¹ã\83¬ã\83\83ã\83\89ã\81®ã\83\97ã\83ã\82°ã\83©ã\83 ã\81§ã\81¯ã\81\93ã\81®å ´å\90\88 \fBgettid\fP(2) ã\81¨ \fBgetpid\fP(2)
+の返り値にする必要があるだろう。 (現状の Linux スレッド実装では、メインスレッドのスレッドID は そのスレッドのプロセスID
+と同じである。つまり、 シグナルスレッドのプログラムではこの場合 \fBgettid\fP(2) と \fBgetpid\fP(2)
は全く同じように使うことができる。) ただし、注意すべき点として、この段落で述べたことは、 ソケットの帯域外データが届いたときに生成される
\fBSIGURG\fP シグナルにはあてはまらない。 このシグナルは常にプロセスかプロセスグループに送られ、 送信先は \fBF_SETOWN\fP
に渡された値にしたがって決められる。
解放したりできる。 また、これらのファイルディスクリプタのいずれかに対して \fBF_UNLCK\fP
操作が明示的に実行された場合や、すべてのファイルディスクリプタが 閉じられた場合にも、リースは解放される。
.P
-Leases may be taken out only on regular files. An unprivileged process may
-take out a lease only on a file whose UID (owner) matches the filesystem UID
-of the process. A process with the \fBCAP_LEASE\fP capability may take out
-leases on arbitrary files.
+リースの取得は通常のファイル (regular file) に対してのみ可能である。 非特権プロセスがリースを取得できるのは、UID (所有者)
+がプロセスの ファイルシステム UID と一致するファイルに対してだけである。 \fBCAP_LEASE\fP
+ケーパビリティを持つプロセスは任意のファイルに対してリースを取得できる。
.TP
\fBF_GETLEASE\fP (\fIvoid\fP)
ファイルディスクリプタ \fIfd\fP に対して設定されているリースの種別を取得する。 \fBF_RDLCK\fP, \fBF_WRLCK\fP, \fBF_UNLCK\fP
特に \fBDN_MULTISHOT\fP を使う場合は、通知にはリアルタイムシグナルを使うべきである。
それは、リアルタイムシグナルを使うことで、複数の通知をキューに入れる ことができるからである。
-\fBNOTE:\fP New applications should use the \fIinotify\fP interface (available
-since kernel 2.6.13), which provides a much superior interface for obtaining
-notifications of filesystem events. See \fBinotify\fP(7).
+\fB注意:\fP 新しくアプリケーションを書く際には、(カーネル 2.6.13 以降で利用可能となった) \fIinotify\fP
+インタフェースを使用すべきである。 \fIinotify\fP はファイルシステムイベントの通知を取得するための ずっと優れたインタフェースである。
+\fBinotify\fP(7) を参照。
.SS パイプの容量の変更
.TP
\fBF_SETPIPE_SZ\fP (\fIint\fP; Linux 2.6.35 以降)
新しいディスクリプタを返す。
.TP
\fBF_GETFD\fP
-ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83»ã\83\95ã\83©ã\82°ã\81®å\80¤
+ファイルディスクリプタフラグの値
.TP
\fBF_GETFL\fP
ファイル状態フラグの値
他のプロセスが保持しているロックによって操作が禁止されている。
.TP
\fBEAGAIN\fP
-ã\81\9dã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81¯ä»\96ã\81®ã\83\97ã\83ã\82»ã\82¹ã\81«ã\82\88ã\81£ã\81¦ã\83¡ã\83¢ã\83ªã\83»ã\83\9eã\83\83ã\83\97ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\81\9fã\82\81ã\80\81 æ\93\8dä½\9cã\81\8cç¦\81æ¢ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\80\82
+そのファイルは他のプロセスによってメモリマップされているため、 操作が禁止されている。
.TP
\fBEBADF\fP
\fIfd\fP がオープンされたファイルディスクリプタでない。 あるいはコマンドが \fBF_SETLK\fP または \fBF_SETLKW\fP
\fBF_DUPFD\fPで、 プロセスがすでに最大数までファイルディスクリプタをオープンしている。
.TP
\fBENOLCK\fP
-ã\82ªã\83¼ã\83\97ã\83³ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\83ã\83\83ã\82¯ã\81®æ\95°ã\81\8cå¤\9aé\81\8eã\81\8eã\81¦ã\80\81ã\83ã\83\83ã\82¯ã\83»ã\83\86ã\83¼ã\83\96ã\83«ã\81\8cã\81\84ã\81£ã\81±ã\81\84ã\81§ã\81\82ã\82\8bã\80\82 ã\81¾ã\81\9fã\81¯ remote locking protocol (ä¾\8bã\81\88ã\81° NFS
+オープンされているロックの数が多過ぎて、ロックテーブルがいっぱいである。 または remote locking protocol (例えば NFS
上のロック) が失敗した。
.TP
\fBEPERM\fP