OSDN Git Service

Update README
[linuxjm/LDP_man-pages.git] / release / man2 / link.2
index 6e68d76..25a355a 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\-08\-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()  は存在するファイルへの新しいリンク (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
+はディレクトリ以外の任意の型のファイルを参照することができる。 一般的には、 ファイルのリンクカウントが 0 の場合は、この操作は成功しない (ただし、
+\fBO_TMPFILE\fP が指定され \fBO_EXCL\fP を指定せずに作成されたファイルは例外である)。 このフラグを使用するためには、 呼び出し元は
+\fBCAP_DAC_READ_SEARCH\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
+がシンボリックリンクの場合リンクの展開が行われる。 procfs がマウントされている場合、これは \fBAT_EMPTY_PATH\fP
+の代替として以下のように使うことができる。
+
+.nf
+.in +4n
+linkat(AT_FDCWD, "/proc/self/fd/<fd>", newdirfd,
+       newname, AT_SYMLINK_FOLLOW);
+.in
+.fi
+.PP
+カーネル 2.6.18 より前では、 \fIflags\fP 引き数は未使用で、 0 を指定しなければならなかった。
+.PP
+\fBlinkat\fP() の必要性についての説明については \fBopenat\fP(2) を参照。
 .SH 返り値
 成功した場合は 0 が返される。エラーの場合は \-1 が返され、 \fIerrno\fP が適切に設定される。
 .SH エラー
@@ -55,6 +136,9 @@ link \- ファイルの新しい名前を作成する
 \fInewpath\fP を含んでいるディレクトリへの書き込みが許されていないか、 \fIoldpath\fP または \fInewpath\fP
 へのディレクトリのどれかに検索許可がない (\fBpath_resolution\fP(7)  を参照)。
 .TP 
+\fBEDQUOT\fP
+ディスクブロックか inode がそのファイルシステムのユーザークォータに達していた。
+.TP 
 \fBEEXIST\fP
 \fInewpath\fP が既に存在する。
 .TP 
@@ -80,7 +164,7 @@ I/O エラーが発生した。
 十分なカーネルメモリーがない。
 .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ªã\82¨ã\83³ã\83\88ã\83ªã\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 のディレクトリ部分が、実際には、ディレクトリでない。
@@ -91,6 +175,10 @@ I/O エラーが発生した。
 \fBEPERM\fP
 \fIoldpath\fP と \fInewpath\fP を含んでいるファイルシステムがハードリンクをサポートしていない。
 .TP 
+\fBEPERM\fP (Linux 3.6 以降)
+呼び出し元にこのファイルへのハードリンクを作成する許可がなかった (\fBproc\fP(5) の
+\fI/proc/sys/fs/protected_hardlinks\fP の説明を参照)。
+.TP 
 \fBEROFS\fP
 ファイルが読み込み専用のファイルシステムに存在する。
 .TP 
@@ -98,11 +186,47 @@ I/O エラーが発生した。
 \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 
+\fBENOENT\fP
+\fIoldpath\fP が相対パス名で、 \fIolddirfd\fP が削除されたディレクトリを参照している。 または、 \fInewpath\fP
+が相対パス名で、 \fInewdirfd\fP が削除されたディレクトリを参照している。
+.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)  を使用すること。
 
@@ -117,14 +241,19 @@ POSIX.1\-2001 では、 \fIoldpath\fP がシンボリックリンクである場
 \fInewpath\fP は \fIoldpath\fP が参照していた同じファイルへのシンボリックリンクになる)。 他のいくつかの実装でも Linux
 と同じように動作する。 POSIX.1\-2008 では \fBlink\fP()  の仕様が変更され、 \fIoldpath\fP
 がシンボリックリンクの場合にシンボリックリンクの参照を 解決するかどうかは実装依存となった。
-リンク作成時のシンボリックリンクの扱いについての詳細な制御に 関しては \fBlinkat\fP(2)  を参照のこと。
+リンク作成時のシンボリックリンクの扱いについての詳細な制御を行う場合には \fBlinkat\fP(2) を使用すること。
+.SS "glibc での注意"
+\fBlinkat\fP() が利用できない古いカーネルでは、 \fBAT_SYMLINK_FOLLOW\fP が指定されていない場合、 glibc ラッパー関数は
+\fBlink\fP() を使用するモードにフォールバックする。 \fIoldpath\fP と \fInewpath\fP が相対パスの場合、 glibc は
+\fIolddirfd\fP と \fInewdirfd\fP 引き数に対応する \fI/proc/self/fd\fP
+のシンボリックリンクに基づいてそれぞれパス名を構成する。
 .SH バグ
 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.41 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。