OSDN Git Service

(split) LDP: Update draft and release (from the previous commit)
[linuxjm/LDP_man-pages.git] / draft / man2 / link.2
index 4b28425..80c019b 100644 (file)
@@ -1,8 +1,8 @@
-.\" Hey Emacs! This file is -*- nroff -*- source.
-.\"
 .\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\"                               1993 Michael Haardt, Ian Jackson.
+.\"             and Copyright (C) 1993 Michael Haardt, Ian Jackson.
+.\" and Copyright (C) 2006, 2014 Michael Kerrisk
 .\"
+.\" %%%LICENSE_START(VERBATIM)
 .\" Permission is granted to make and distribute verbatim copies of this
 .\" manual provided the copyright notice and this permission notice are
 .\" preserved on all copies.
@@ -22,6 +22,7 @@
 .\"
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
 .\"
 .\" Modified 1993-07-23 by Rik Faith <faith@cs.unc.edu>
 .\" Modified 1994-08-21 by Michael Haardt
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH LINK 2 2008\-08\-21 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
+.\"         all rights reserved.
+.\" Translated Thu Dec 11 23:47:55 JST 1997
+.\"         by HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Updated & Modified Tue Feb  8 06:36:08 JST 2005
+.\"         by Yuichi SATO <ysato444@yahoo.co.jp>
+.\" Updated & Modified Fri Apr 22 02:05:00 JST 2005 by Yuichi SATO
+.\" Updated 2008-09-07, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.08
+.\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH LINK 2 2014\-03\-19 Linux "Linux Programmer's Manual"
 .SH 名前
-link \- ファイルの新しい名前を作成する
+link, linkat \- ファイルの新しい名前を作成する
 .SH 書式
+.nf
 \fB#include <unistd.h>\fP
 .sp
 \fBint link(const char *\fP\fIoldpath\fP\fB, const char *\fP\fInewpath\fP\fB);\fP
+.sp
+\fB#include <fcntl.h>           \fP/* AT_* 定数の定義 */
+\fB#include <unistd.h>\fP
+.sp
+\fBint linkat(int \fP\fIolddirfd\fP\fB, const char *\fP\fIoldpath\fP\fB,\fP
+\fB           int \fP\fInewdirfd\fP\fB, const char *\fP\fInewpath\fP\fB, int \fP\fIflags\fP\fB);\fP
+.fi
+.sp
+.in -4n
+glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
+.in
+.sp
+\fBlinkat\fP():
+.PD 0
+.ad l
+.RS 4
+.TP  4
+glibc 2.10 以降:
+_XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
+.TP 
+glibc 2.10 より前:
+_ATFILE_SOURCE
+.RE
+.ad
+.PD
 .SH 説明
-\fBlink\fP()  ã\81¯å­\98å\9c¨ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\81¸ã\81®æ\96°ã\81\97ã\81\84ã\83ªã\83³ã\82¯ (link)  (ã\83\8fã\83¼ã\83\89ã\83»ã\83ªã\83³ã\82¯ (hard link) ã\81¨ã\82\82ã\81\84ã\81\86) ã\82\92ä½\9cæ\88\90ã\81\99ã\82\8bã\80\82
+\fBlink\fP()  は存在するファイルへの新しいリンク (link)  (ハードリンク (hard link) ともいう) を作成する。
 
-\fInewpath\fP が存在する場合には上書きは\fIされない\fP。
+\fInewpath\fP が存在する場合には上書きは\fIされない\fP。
 
 この新しい名前は全ての操作において古い名前と完全に同じように使用される; 両方の名前は同じファイルを参照しており (それで同じ許可
 (permission) や所有者 (ownership) となるので)、 どちらの名前が本来のものであるか判別できない。
+.SS linkat()
+\fBlinkat\fP() システムコールは \fBlink\fP() と全く同様に動作するが、以下で説明する点が異なる。
+
+\fIoldpath\fP で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター \fIolddirfd\fP
+が参照するディレクトリに対する相対パスと解釈される (\fBlink\fP(2)
+に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。
+
+\fIoldpath\fP で指定されたパス名が相対パスで、 \fIolddirfd\fP が特別な値 \fBAT_FDCWD\fP の場合、 (\fBlink\fP(2)
+と同様に) \fIoldpath\fP は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。
+
+\fIoldpath\fP で指定されたパス名が絶対パスの場合、 \fIolddirfd\fP は無視される。
+
+\fInewpath\fP の解釈は \fIoldpath\fP と同じである。 相対パスのパス名がファイルディスクリプター \fInewdirfd\fP
+が参照するディレクトリと解釈される点だけが異なる。
+
+以下の値のビット単位の論理和を \fIflags\fP に指定できる。
+.TP 
+\fBAT_EMPTY_PATH\fP (Linux 2.6.39 以降)
+.\" commit 11a7b371b64ef39fc5fb1b6f2218eef7c4d035e3
+.\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed
+\fIoldpath\fP が空文字列の場合、 \fIolddirfd\fP が参照するファイルへのリンクを作成する (\fIolddirfd\fP は
+\fBopen\fP(2) の \fBO_PATH\fP フラグを使って取得する)。 この場合、 \fIolddirfd\fP
+はディレクトリではなくファイルを参照していなければならない。 このフラグを使用するためには、 呼び出し元は \fBCAP_DAC_READ_SEARCH\fP
+ケーパビリティを持っていなければならない。 これにより、 任意のユーザーが UNIX
+ドメインソケット経由で受信したファイルディスクリプターを使ってハードリンクを作成することがないようになっている (\fBunix\fP(7) の
+\fBSCM_RIGHTS\fP の議論を参照)。 このフラグは Linux 固有で、 この定義を得るには \fB_GNU_SOURCE\fP を定義すること。
+.TP 
+\fBAT_SYMLINK_FOLLOW\fP (Linux 2.6.18 以降)
+\fBlinkat\fP() は (\fBlink\fP() 同様) デフォルトでは \fIoldpath\fP がシンボリックリンクの場合リンクの展開を行わない。
+フラグ \fBAT_SYMLINK_FOLLOW\fP を \fIflags\fP に指定することができ、指定した場合 \fIoldpath\fP
+がシンボリックリンクの場合リンクの展開が行われる。
+.PP
+カーネル 2.6.18 より前では、 \fIflags\fP 引き数は未使用で、 0 を指定しなければならなかった。
+.PP
+\fBlinkat\fP() の必要性についての説明については \fBopenat\fP(2) を参照。
 .SH 返り値
 成功した場合は 0 が返される。エラーの場合は \-1 が返され、 \fIerrno\fP が適切に設定される。
 .SH エラー
@@ -55,6 +128,9 @@ link \- ファイルの新しい名前を作成する
 \fInewpath\fP を含んでいるディレクトリへの書き込みが許されていないか、 \fIoldpath\fP または \fInewpath\fP
 へのディレクトリのどれかに検索許可がない (\fBpath_resolution\fP(7)  を参照)。
 .TP 
+\fBEDQUOT\fP
+ディスクブロックか inode がそのファイルシステムのユーザクォータに達していた。
+.TP 
 \fBEEXIST\fP
 \fInewpath\fP が既に存在する。
 .TP 
@@ -65,7 +141,7 @@ link \- ファイルの新しい名前を作成する
 I/O エラーが発生した。
 .TP 
 \fBELOOP\fP
-\fIoldpath\fP ã\81¾ã\81\9fã\81¯ \fInewpath\fP ã\82\92解決ã\81\99ã\82\8bé\9a\9bã\81«é\81­é\81\87ã\81\97ã\81\9fã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\81\8cå¤\9aé\81\8eã\81\8eã\82\8bã\80\82
+\fIoldpath\fP または \fInewpath\fP を解決する際に遭遇したシンボリックリンクが多過ぎる。
 .TP 
 \fBEMLINK\fP
 \fIoldpath\fP によって参照されるファイルは 既に最大数までのリンクを持っている。
@@ -74,13 +150,13 @@ I/O エラーが発生した。
 \fIoldpath\fP または \fInewpath\fP が長過ぎる。
 .TP 
 \fBENOENT\fP
-\fIoldpath\fP ã\81¾ã\81\9fã\81¯ \fInewpath\fP ã\81®ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªé\83¨å\88\86ã\81\8cå­\98å\9c¨ã\81\97ã\81ªã\81\84ã\81\8bã\80\81 å£\8aã\82\8cã\81\9f(dangling)ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\81§ã\81\82ã\82\8bã\80\82
+\fIoldpath\fP または \fInewpath\fP のディレクトリ部分が存在しないか、 壊れた(dangling)シンボリックリンクである。
 .TP 
 \fBENOMEM\fP
 十分なカーネルメモリーがない。
 .TP 
 \fBENOSPC\fP
\81\9dã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92å\90«ã\82\93ã\81§ã\81\84ã\82\8bã\83\87ã\83\90ã\82¤ã\82¹ã\81«æ\96°ã\81\97ã\81\84ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83»ã\82¨ã\83³ã\83\88ã\83ªã\82\92 ä½\9cæ\88\90ã\81\99ã\82\8bã\81\9fã\82\81ã\81®ç©ºã\81\8dã\81\8cã\81ªã\81\84ã\80\82
+そのファイルを含んでいるデバイスに新しいディレクトリエントリを 作成するための空きがない。
 .TP 
 \fBENOTDIR\fP
 \fIoldpath\fP または \fInewpath\fP のディレクトリ部分が、実際には、ディレクトリでない。
@@ -89,39 +165,78 @@ I/O エラーが発生した。
 \fIoldpath\fP がディレクトリである。
 .TP 
 \fBEPERM\fP
-\fIoldpath\fP と \fInewpath\fP を含んでいるファイル・システムがハード・リンクをサポートしていない。
+\fIoldpath\fP と \fInewpath\fP を含んでいるファイルシステムがハードリンクをサポートしていない。
+.TP 
+\fBEPERM\fP (Linux 3.6 以降)
+呼び出し元にこのファイルへのハードリンクを作成する許可がなかった (\fBproc\fP(5) の
+\fI/proc/sys/fs/protected_hardlinks\fP の説明を参照)。
 .TP 
 \fBEROFS\fP
\83\95ã\82¡ã\82¤ã\83«ã\81\8c読ã\81¿è¾¼ã\81¿å°\82ç\94¨ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\83»ã\82·ã\82¹ã\83\86ã\83 ã\81«å­\98å\9c¨ã\81\99ã\82\8bã\80\82
+ファイルが読み込み専用のファイルシステムに存在する。
 .TP 
 \fBEXDEV\fP
-\fIoldpath\fP と \fInewpath\fP が同じマウントされたファイル・システムに存在しない。 (Linux は 1
-つのファイル・システムを複数のマウント位置に マウントすることを許可している。 しかし \fBlink\fP()
-は、たとえ同じファイル・システムであっても、 別々のマウント位置を跨いでは動作しない。)
+\fIoldpath\fP と \fInewpath\fP が同じマウントされたファイルシステムに存在しない。 (Linux は 1
+つのファイルシステムを複数のマウント位置に マウントすることを許可している。 しかし \fBlink\fP()  は、たとえ同じファイルシステムであっても、
+別々のマウント位置を跨いでは動作しない。)
+.PP
+\fBlinkat\fP() では以下のエラーも発生する。
+.TP 
+\fBEBADF\fP
+\fIolddirfd\fP か \fInewdirfd\fP が有効なファイルディスクリプタでない。
+.TP 
+\fBEINVAL\fP
+無効なフラグ値が \fIflags\fP に指定された。
+.TP 
+\fBENOENT\fP
+\fBAT_EMPTY_PATH\fP が \fIflags\fP に指定されたが、呼び出し元が \fBCAP_DAC_READ_SEARCH\fP
+ケーパビリティを持っていなかった。
+.TP 
+\fBENOENT\fP
+以下の呼び出しで作成されたファイルディスクリプターに対応する \fI/proc/self/fd/NN\fP ファイルに対してリンクを行おおうとした。
+
+    open(path, O_TMPFILE | O_EXCL, mode);
+
+\fBopen\fP(2) 参照。
+.TP 
+\fBENOTDIR\fP
+\fIoldpath\fP が相対パスで、 \fIolddirfd\fP がディレクトリ以外のファイルを参照している。または \fInewpath\fP と
+\fInewdirfd\fP に関して同じ状況である。
+.TP 
+\fBEPERM\fP
+\fIflags\fP に \fBAT_EMPTY_PATH\fP が指定され、 \fIoldpath\fP が空文字列で、 \fIolddirfd\fP
+がディレクトリを参照している。
+.SH バージョン
+\fBlinkat\fP()  はカーネル 2.6.16 で Linux に追加された。 ライブラリによるサポートはバージョン 2.4 で glibc
+に追加された。
 .SH 準拠
 .\" SVr4 documents additional ENOLINK and
 .\" EMULTIHOP error conditions; POSIX.1 does not document ELOOP.
 .\" X/OPEN does not document EFAULT, ENOMEM or EIO.
-SVr4, 4.3BSD, POSIX.1\-2001 (但し「注意」を参照)。
+\fBlink\fP(): SVr4, 4.3BSD, POSIX.1\-2001 (但し「注意」を参照), POSIX.1\-2008.
+
+\fBlinkat\fP(): POSIX.1\-2008.
 .SH 注意
-\fBlink\fP()  でファイル・システムを超えてハード・リンクを作成することはできない。 このような場合は \fBsymlink\fP(2)
-を使用すること。
+\fBlink\fP()  でファイルシステムを超えてハードリンクを作成することはできない。 このような場合は \fBsymlink\fP(2)  を使用すること。
 
 .\" more precisely: since kernel 1.3.56
 .\" For example, the default Solaris compilation environment
 .\" behaves like Linux, and contributors to a March 2005
 .\" thread in the Austin mailing list reported that some
 .\" other (System V) implementations did/do the same -- MTK, Apr 05
-POSIX.1\-2001 ã\81§ã\81¯ã\80\81 \fIoldpath\fP ã\81\8cã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\81§ã\81\82ã\82\8bå ´å\90\88ã\80\81 \fBlink\fP()  ã\81¯ \fIoldpath\fP
+POSIX.1\-2001 では、 \fIoldpath\fP がシンボリックリンクである場合、 \fBlink\fP()  は \fIoldpath\fP
 の参照を解決すべきであると記述されている。 しかし、カーネル 2.0 以降の Linux ではそのようになっていない。 \fIoldpath\fP
\81\8cã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\81§ã\81\82ã\82\8bå ´å\90\88ã\80\81 \fInewpath\fP ã\81¯å\90\8cã\81\98ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»リンクファイルへの (ハード) リンクとして作成される (つまり
\81\8cã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83ªã\83³ã\82¯ã\81§ã\81\82ã\82\8bå ´å\90\88ã\80\81 \fInewpath\fP ã\81¯å\90\8cã\81\98ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯リンクファイルへの (ハード) リンクとして作成される (つまり
 \fInewpath\fP は \fIoldpath\fP が参照していた同じファイルへのシンボリックリンクになる)。 他のいくつかの実装でも Linux
 と同じように動作する。 POSIX.1\-2008 では \fBlink\fP()  の仕様が変更され、 \fIoldpath\fP
\81\8cã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\81®å ´å\90\88ã\81«ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»リンクの参照を 解決するかどうかは実装依存となった。
\83ªã\83³ã\82¯ä½\9cæ\88\90æ\99\82ã\81®ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83»ã\83ªã\83³ã\82¯ã\81®æ\89±ã\81\84ã\81«ã\81¤ã\81\84ã\81¦ã\81®è©³ç´°ã\81ªå\88¶å¾¡ã\81« é\96¢ã\81\97ã\81¦ã\81¯ \fBlinkat\fP(2)  ã\82\92å\8f\82ç\85§ã\81®こと。
\81\8cã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83ªã\83³ã\82¯ã\81®å ´å\90\88ã\81«ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯リンクの参照を 解決するかどうかは実装依存となった。
\83ªã\83³ã\82¯ä½\9cæ\88\90æ\99\82ã\81®ã\82·ã\83³ã\83\9cã\83ªã\83\83ã\82¯ã\83ªã\83³ã\82¯ã\81®æ\89±ã\81\84ã\81«ã\81¤ã\81\84ã\81¦ã\81®è©³ç´°ã\81ªå\88¶å¾¡ã\82\92è¡\8cã\81\86å ´å\90\88ã\81«ã\81¯ \fBlinkat\fP(2) ã\82\92使ç\94¨ã\81\99ã\82\8bこと。
 .SH バグ
-NFS ã\83\95ã\82¡ã\82¤ã\83«ã\83»ã\82·ã\82¹ã\83\86ã\83 ã\81§ã\81¯ã\80\81NFS ã\82µã\83¼ã\83\90ã\83¼ã\81\8cã\83ªã\83³ã\82¯ã\82\92ä½\9cæ\88\90ã\81\97ã\81\9få¾\8cã\81«ã\80\81 ã\81\9dã\82\8cã\82\92ä¼\9dã\81\88ã\82\8bå\89\8dã\81«æ­»ã\82\93ã\81 å ´å\90\88ã\81«ã\81¯è¿\94ã\82\8aå\80¤ã\81\8cä¸\8dæ­£ã\81ªå ´å\90\88ã\81\8cã\81\82ã\82\8bã\80\82
+NFS ファイルシステムでは、NFS サーバーがリンクを作成した後に、 それを伝える前に死んだ場合には返り値が不正な場合がある。
 リンクが作成できたかどうか見つけるためには \fBstat\fP(2)  を使用すること。
 .SH 関連項目
-\fBln\fP(1), \fBlinkat\fP(2), \fBopen\fP(2), \fBrename\fP(2), \fBstat\fP(2), \fBsymlink\fP(2),
-\fBunlink\fP(2), \fBpath_resolution\fP(7), \fBsymlink\fP(7)
+\fBln\fP(1), \fBopen\fP(2), \fBrename\fP(2), \fBstat\fP(2), \fBsymlink\fP(2), \fBunlink\fP(2),
+\fBpath_resolution\fP(7), \fBsymlink\fP(7)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.64 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。