OSDN Git Service

(split) LDP: Update draft and release (from the previous commit)
[linuxjm/LDP_man-pages.git] / draft / man2 / readlink.2
index 57bc74d..db88f79 100644 (file)
@@ -1,5 +1,6 @@
 .\" Copyright (c) 1983, 1991 The Regents of the University of California.
 .\" And Copyright (C) 2011 Guillem Jover <guillem@hadrons.org>
+.\" And Copyright (C) 2006, 2014 Michael Kerrisk
 .\" All rights reserved.
 .\"
 .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB)
 .\" Updated 2008-08-06, Akihiro MOTOKI, LDP v3.05
 .\" Updated 2012-05-08, Akihiro MOTOKI <amotoki@gmail.com>
 .\"
-.TH READLINK 2 2013\-07\-18 Linux "Linux Programmer's Manual"
+.TH READLINK 2 2014\-02\-21 Linux "Linux Programmer's Manual"
 .SH 名前
-readlink \- シンボリックリンクの値を読む
+readlink, readlinkat \- シンボリックリンクの値を読む
 .SH 書式
+.nf
 \fB#include <unistd.h>\fP
 .sp
-\fBssize_t readlink(const char *\fP\fIpath\fP\fB, char *\fP\fIbuf\fP\fB, size_t
-\fP\fIbufsiz\fP\fB);\fP
+\fBssize_t readlink(const char *\fP\fIpathname\fP\fB, char *\fP\fIbuf\fP\fB, size_t \fP\fIbufsiz\fP\fB);\fP
+.sp
+\fB#include <fcntl.h>           \fP/* AT_* 定数の定義 */
+\fB#include <unistd.h>\fP
 .sp
+\fBint readlinkat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB,\fP
+\fB               char *\fP\fIbuf\fP\fB, size_t \fP\fIbufsiz\fP\fB);\fP
+.sp
+.fi
 .in -4n
 glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
 .in
@@ -72,13 +80,44 @@ glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参
 .RS 4
 _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE\ >=\ 200112L
 .RE
+.sp
+\fBreadlinkat\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 b
+.PD
 .SH 説明
-\fBreadlink\fP()  は \fIpath\fP で与えられたシンボリックリンクの内容を \fIbuf\fP バッファーへ格納する、 \fIbuf\fP のサイズは
-\fIbufsiz\fP である。 \fBreadlink\fP()  は NULL バイトを \fIbuf\fP に追加しない。
+\fBreadlink\fP()  は \fIpathname\fP で与えられたシンボリックリンクの内容を \fIbuf\fP バッファーへ格納する、 \fIbuf\fP
+のサイズは \fIbufsiz\fP である。 \fBreadlink\fP()  は NULL バイトを \fIbuf\fP に追加しない。
 その内容全てを格納するのにバッファーが小さ過ぎる場合は、 (\fIbufsiz\fP バイトの長さに) 内容を切り詰める。
+.SS readlinkat()
+\fBreadlinkat\fP() システムコールは \fBreadlink\fP() と全く同様に動作するが、以下で説明する点が異なる。
+
+\fIpathname\fP で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター \fIdirfd\fP
+が参照するディレクトリに対する相対パスと解釈される (\fBreadlink\fP()
+に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。
+
+\fIpathname\fP で指定されたパス名が相対パスで、 \fIdirfd\fP が特別な値 \fBAT_FDCWD\fP の場合、 (\fBreadlink\fP()
+と同様に) \fIpathname\fP は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。
+
+\fIpathname\fP で指定されたパス名が絶対パスの場合、 \fIdirfd\fP は無視される。
+
+.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
+Linux 2.6.39 以降では、 \fIpathname\fP に空文字列を指定できる。 その場合、呼び出しは \fIdirfd\fP
+が参照するファイルに対して行われる (\fIdirfd\fP は \fBopen\fP(2) の \fBO_PATH\fP フラグを使って取得できる)。 この場合、
+\fIdirfd\fP はディレクトリだけでなく、ファイルを参照していてもよい。
+.PP
+\fBreadlinkat\fP() の必要性についての説明については \fBopenat\fP(2) を参照。
 .SH 返り値
-成功すると、 \fBreadlink\fP()  は \fIbuf\fP に格納されたバイト数を返す。 エラーの場合、\-1 を返し、 \fIerrno\fP
+成功すると、これらのシステムコールは \fIbuf\fP に格納されたバイト数を返す。 エラーの場合、\-1 を返し、 \fIerrno\fP
 にエラーを示す値を設定する。
 .SH エラー
 .TP 
@@ -116,25 +155,33 @@ _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTEND
 .TP 
 \fBENOTDIR\fP
 パスのディレクトリ部分がディレクトリでない。
+.PP
+\fBreadlinkat\fP() では以下のエラーも発生する。
+.TP 
+\fBEBADF\fP
+\fIdirfd\fP が有効なファイルディスクリプタではない。
+.TP 
+\fBENOTDIR\fP
+\fIpathname\fP が相対パスで、 \fIdirfd\fP がディレクトリ以外のファイルを参照しているファイルディスクリプタである。
+.SH バージョン
+\fBreadlinkat\fP()  はカーネル 2.6.16 で Linux に追加された。 ライブラリによるサポートはバージョン 2.4 で glibc
+に追加された。
 .SH 準拠
-4.4BSD (\fBreadlink\fP()  は 4.2BSD で初めて登場した), POSIX.1\-2001.
+4.4BSD (\fBreadlink\fP()  は 4.2BSD で初めて登場した), POSIX.1\-2001, POSIX.1\-2008.
+
+\fBreadlinkat\fP(): POSIX.1\-2008.
 .SH 注意
 バージョン 2.4 以前の glibc (バージョン 2.4 を含む) では、 \fBreadlink\fP()  の返り値の型は \fIint\fP
 で宣言されていた。現在では、返り値の型は \fIssize_t\fP である (返り値 \fIssize_t\fP は POSIX.1\-2001 で (新たに)
 必須となった)。
 
-静的な大きさのバッファを使うと、シンボリックリンクの内容を
-格納するのに十分な領域がない場合がある。
-バッファに必要なサイズは、そのシンボリックリンクに対して \fBlstat\fP(2)
-の呼び出しで返される \fIstat.st_size\fP の値から取得できる。
-ただし、 \fBreadlink\fP() が書き込んだバイト数をチェックして、
-シンボリックリンクのサイズが \fBlstat\fP(2) と \fBreadlink\fP() の呼び出し
-の間で増えていないことを確認すべきである。
-\fBreadlink\fP() 用のバッファを動的に割り当てる方法でも、
-バッファサイズとして \fIPATH_MAX\fP を使用する場合に共通する移植性の
-問題を解決することができる。なぜなら、POSIX では、
-システムがそのような上限値を定義していない場合には、
-\fIPATH_MAX\fP が定義されることが保証されていないからである。
+静的な大きさのバッファを使うと、 シンボリックリンクの内容を格納するのに十分な領域がない場合がある。 バッファに必要なサイズは、
+そのシンボリックリンクに対して \fBlstat\fP(2) の呼び出しで返される \fIstat.st_size\fP の値から取得できる。 ただし、
+\fBreadlink\fP() や \fBreadlinkat\fP() が書き込んだバイト数をチェックして、
+シンボリックリンクのサイズが二つの呼び出しの間で増えていないことを確認すべきである。 \fBreadlink\fP() や \fBreadlinkat\fP()
+用のバッファを動的に割り当てる方法でも、 バッファサイズとして \fIPATH_MAX\fP を使用する場合に共通する移植性の問題を解決することができる。
+なぜなら、POSIX では、 システムがそのような上限値を定義していない場合には、 \fIPATH_MAX\fP
+が定義されることが保証されていないからである。
 .SH 例
 以下のプログラムは、 \fBreadlink\fP() が必要とするバッファを、
 \fBlstat\fP() が提供する情報に基づいて動的に割り当てる。
@@ -173,7 +220,7 @@ main(int argc, char *argv[])
     r = readlink(argv[1], linkname, sb.st_size + 1);
 
     if (r == \-1) {
-        perror("lstat");
+        perror("readlink");
         exit(EXIT_FAILURE);
     }
 
@@ -191,9 +238,9 @@ main(int argc, char *argv[])
 }
 .fi
 .SH 関連項目
-\fBreadlink\fP(1), \fBlstat\fP(2), \fBreadlinkat\fP(2), \fBstat\fP(2), \fBsymlink\fP(2),
+\fBreadlink\fP(1), \fBlstat\fP(2), \fBstat\fP(2), \fBsymlink\fP(2),
 \fBpath_resolution\fP(7), \fBsymlink\fP(7)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.64 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。