OSDN Git Service

Update release for LDP 3.67
[linuxjm/LDP_man-pages.git] / release / man2 / readlink.2
index ff021d2..b96f1a1 100644 (file)
@@ -1,6 +1,9 @@
 .\" 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)
 .\" Redistribution and use in source and binary forms, with or without
 .\" modification, are permitted provided that the following conditions
 .\" are met:
 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
+.\" %%%LICENSE_END
 .\"
 .\"     @(#)readlink.2 6.8 (Berkeley) 3/10/91
 .\"
-.\" Modified Sat Jul 24 00:10:21 1993 by Rik Faith <faith@cs.unc.edu>
+.\" Modified Sat Jul 24 00:10:21 1993 by Rik Faith (faith@cs.unc.edu)
 .\" Modified Tue Jul  9 23:55:17 1996 by aeb
 .\" Modified Fri Jan 24 00:26:00 1997 by aeb
+.\" 2011-09-20, Guillem Jover <guillem@hadrons.org>:
+.\"     Added text on dynamically allocating buffer + example program
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
 .\"
 .\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
 .\"         all rights reserved.
 .\" Updated 2005-02-10, Yuichi SATO <ysato444@yahoo.co.jp>
 .\" Updated 2006-07-19, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.36
 .\" Updated 2008-08-06, Akihiro MOTOKI, LDP v3.05
+.\" Updated 2012-05-08, Akihiro MOTOKI <amotoki@gmail.com>
 .\"
-.\"WORD:       symbolic link           ¥·¥ó¥Ü¥ê¥Ã¥¯¡¦¥ê¥ó¥¯
-.\"WORD:       buffer                  ¥Ð¥Ã¥Õ¥¡¡¼
-.\"WORD:       NUL                     ¥Ì¥ëʸ»ú
-.\"WORD:       global variable         ¥°¥í¡¼¥Ð¥ëÊÑ¿ô
-.\"WORD:       directory               ¥Ç¥£¥ì¥¯¥È¥ê
-.\"
-.TH READLINK 2 2010-09-20 "Linux" "Linux Programmer's Manual"
-.SH Ì¾Á°
-readlink \- ¥·¥ó¥Ü¥ê¥Ã¥¯¡¦¥ê¥ó¥¯¤ÎÃͤòÆɤà
-.SH ½ñ¼°
-.B #include <unistd.h>
+.TH READLINK 2 2014\-05\-10 Linux "Linux Programmer's Manual"
+.SH 名前
+readlink, readlinkat \- シンボリックリンクの値を読む
+.SH 書式
+.nf
+\fB#include <unistd.h>\fP
+.sp
+\fBssize_t readlink(const char *\fP\fIpathname\fP\fB, char *\fP\fIbuf\fP\fB, size_t \fP\fIbufsiz\fP\fB);\fP
 .sp
-.BI "ssize_t readlink(const char *" path ", char *" buf ", size_t " bufsiz );
+\fB#include <fcntl.h>           \fP/* AT_* 定数の定義 */
+\fB#include <unistd.h>\fP
 .sp
+\fBssize_t 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 ¸þ¤±¤Îµ¡Ç½¸¡ºº¥Þ¥¯¥í¤ÎÍ×·ï
-.RB ( feature_test_macros (7)
-»²¾È):
+glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
 .in
 .sp
 .ad l
-.BR readlink ():
+\fBreadlink\fP():
+.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
-_BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 ||
-_XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE\ >=\ 200112L
+.TP  4
+glibc 2.10 以降:
+_XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
+.TP 
+glibc 2.10 より前:
+_ATFILE_SOURCE
 .RE
 .ad b
-.SH ÀâÌÀ
-.BR readlink ()
-¤Ï
-.I path
-¤ÇÍ¿¤¨¤é¤ì¤¿¥·¥ó¥Ü¥ê¥Ã¥¯¡¦¥ê¥ó¥¯¤ÎÆâÍƤò
-.I buf
-¥Ð¥Ã¥Õ¥¡¡¼¤Ø³ÊǼ¤¹¤ë¡¢
-.I buf
-¤Î¥µ¥¤¥º¤Ï
-.I bufsiz
-¤Ç¤¢¤ë¡£
-.BR readlink ()
-¤Ï NULL ¥Ð¥¤¥È¤ò
-.I buf
-¤ËÄɲ䷤ʤ¤¡£
-¤½¤ÎÆâÍÆÁ´¤Æ¤ò³ÊǼ¤¹¤ë¤Î¤Ë¥Ð¥Ã¥Õ¥¡¡¼¤¬¾®¤µ²á¤®¤ë¾ì¹ç¤Ï¡¢
-.RI ( bufsiz
-¥Ð¥¤¥È¤ÎŤµ¤Ë) ÆâÍƤòÀÚ¤êµÍ¤á¤ë¡£
-.SH ÊÖ¤êÃÍ
-À®¸ù¤¹¤ë¤È¡¢
-.BR readlink ()
-¤Ï
-.I buf
-¤Ë³ÊǼ¤µ¤ì¤¿¥Ð¥¤¥È¿ô¤òÊÖ¤¹¡£
-¥¨¥é¡¼¤Î¾ì¹ç¡¢\-1 ¤òÊÖ¤·¡¢
-.I errno
-¤Ë¥¨¥é¡¼¤ò¼¨¤¹ÃͤòÀßÄꤹ¤ë¡£
-.SH ¥¨¥é¡¼
-.TP
-.B EACCES
-¥Ñ¥¹¤Î¥Ç¥£¥ì¥¯¥È¥êÉôʬ¤Ë¸¡º÷µö²Ä¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤Ê¤¤
-.RB ( path_resolution (7)
-¤â»²¾È¤¹¤ë¤³¤È)¡£
-.TP
-.B EFAULT
-.I buf
-¤¬¥×¥í¥»¥¹¤Ë³ä¤êÅö¤Æ¤é¤ì¤¿¥¢¥É¥ì¥¹¶õ´Ö¤Î³°¤ò»Ø¤·¤Æ¤¤¤ë¡£
-.TP
-.B EINVAL
-.I bufsiz
-¤¬Àµ¤Ç¤Ê¤¤¡£
+.PD
+.SH 説明
+\fBreadlink\fP()  は \fIpathname\fP で与えられたシンボリックリンクの内容を \fIbuf\fP バッファーへ格納する、 \fIbuf\fP
+のサイズは \fIbufsiz\fP である。 \fBreadlink\fP()  はヌルバイトを \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 返り値
+成功すると、これらのシステムコールは \fIbuf\fP に格納されたバイト数を返す。 エラーの場合、\-1 を返し、 \fIerrno\fP
+にエラーを示す値を設定する。
+.SH エラー
+.TP 
+\fBEACCES\fP
+パスのディレクトリ部分に検索許可が与えられていない (\fBpath_resolution\fP(7)  も参照すること)。
+.TP 
+\fBEFAULT\fP
+\fIbuf\fP がプロセスに割り当てられたアドレス空間の外を指している。
+.TP 
+\fBEINVAL\fP
 .\" At the glibc level, bufsiz is unsigned, so this error can only occur
 .\" if bufsiz==0.  However, the in the kernel syscall, bufsiz is signed,
 .\" and this error can also occur if bufsiz < 0.
 .\" See: http://thread.gmane.org/gmane.linux.man/380
 .\" Subject: [patch 0/3] [RFC] kernel/glibc mismatch of "readlink" syscall?
-.TP
-.B EINVAL
-»ØÄꤷ¤¿¥Õ¥¡¥¤¥ë¤¬¥·¥ó¥Ü¥ê¥Ã¥¯¡¦¥ê¥ó¥¯¤Ç¤Ê¤¤¡£
-.TP
-.B EIO
-¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤ÎÆɤ߹þ¤ßÃæ¤Ë I/O ¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿¡£
-.TP
-.B ELOOP
-¥Ñ¥¹Ì¾¤Ë¥·¥ó¥Ü¥ê¥Ã¥¯¡¦¥ê¥ó¥¯¤¬Â¿¤¹¤®¤ë¡£
-.TP
-.B ENAMETOOLONG
-¥Ñ¥¹Ì¾¤«¥Ñ¥¹Ì¾¤Î°ìÉôʬ¤¬Ä¹²á¤®¤ë¡£
-.TP
-.B ENOENT
-¤½¤Î̾Á°¤Î¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤¤¡£
-.TP
-.B ENOMEM
-¥«¡¼¥Í¥ë¤Ë½½Ê¬¤Ê¥á¥â¥ê¤¬¤Ê¤¤¡£
-.TP
-.B ENOTDIR
-¥Ñ¥¹¤Î¥Ç¥£¥ì¥¯¥È¥êÉôʬ¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ê¤¤¡£
-.SH ½àµò
-4.4BSD
-.RB ( readlink ()
-¤Ï 4.2BSD ¤Ç½é¤á¤ÆÅо줷¤¿), POSIX.1-2001.
-.SH Ãí°Õ
-¥Ð¡¼¥¸¥ç¥ó 2.4 °ÊÁ°¤Î glibc (¥Ð¡¼¥¸¥ç¥ó 2.4 ¤ò´Þ¤à) ¤Ç¤Ï¡¢
-.BR readlink ()
-¤ÎÊÖ¤êÃͤη¿¤Ï
-.I int
-¤ÇÀë¸À¤µ¤ì¤Æ¤¤¤¿¡£¸½ºß¤Ç¤Ï¡¢ÊÖ¤êÃͤη¿¤Ï
-.I ssize_t
-¤Ç¤¢¤ë (ÊÖ¤êÃÍ
-.I ssize_t
-¤Ï POSIX.1-2001 ¤Ç (¿·¤¿¤Ë) É¬¿Ü¤È¤Ê¤Ã¤¿)¡£
-.SH ´ØÏ¢¹àÌÜ
-.BR lstat (2),
-.BR readlinkat (2),
-.BR stat (2),
-.BR symlink (2),
-.BR path_resolution (7),
-.BR symlink (7)
+\fIbufsiz\fP が正でない。
+.TP 
+\fBEINVAL\fP
+指定したファイルがシンボリックリンクでない。
+.TP 
+\fBEIO\fP
+ファイルシステムの読み込み中に I/O エラーが起こった。
+.TP 
+\fBELOOP\fP
+パス名にシンボリックリンクが多すぎる。
+.TP 
+\fBENAMETOOLONG\fP
+パス名かパス名の一部分が長過ぎる。
+.TP 
+\fBENOENT\fP
+その名前のファイルが存在しない。
+.TP 
+\fBENOMEM\fP
+十分なカーネルメモリーがない。
+.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, 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() や \fBreadlinkat\fP() が書き込んだバイト数をチェックして、
+シンボリックリンクのサイズが二つの呼び出しの間で増えていないことを確認すべきである。 \fBreadlink\fP() や \fBreadlinkat\fP()
+用のバッファを動的に割り当てる方法でも、 バッファサイズとして \fIPATH_MAX\fP を使用する場合に共通する移植性の問題を解決することができる。
+なぜなら、POSIX では、 システムがそのような上限値を定義していない場合には、 \fIPATH_MAX\fP
+が定義されることが保証されていないからである。
+.SH 例
+以下のプログラムは、 \fBreadlink\fP() が必要とするバッファを、
+\fBlstat\fP() が提供する情報に基づいて動的に割り当てる。
+また、両方の呼び出し間で競合条件がないことを保証している。
+.nf
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(int argc, char *argv[])
+{
+    struct stat sb;
+    char *linkname;
+    ssize_t r;
+
+    if (argc != 2) {
+        fprintf(stderr, "Usage: %s <pathname>\en", argv[0]);
+        exit(EXIT_FAILURE);
+    }
+
+    if (lstat(argv[1], &sb) == \-1) {
+        perror("lstat");
+        exit(EXIT_FAILURE);
+    }
+
+    linkname = malloc(sb.st_size + 1);
+    if (linkname == NULL) {
+        fprintf(stderr, "insufficient memory\en");
+        exit(EXIT_FAILURE);
+    }
+
+    r = readlink(argv[1], linkname, sb.st_size + 1);
+
+    if (r == \-1) {
+        perror("readlink");
+        exit(EXIT_FAILURE);
+    }
+
+    if (r > sb.st_size) {
+        fprintf(stderr, "symlink increased in size "
+                        "between lstat() and readlink()\en");
+        exit(EXIT_FAILURE);
+    }
+
+    linkname[r] = \(aq\e0\(aq;
+
+    printf("\(aq%s\(aq points to \(aq%s\(aq\en", argv[1], linkname);
+
+    exit(EXIT_SUCCESS);
+}
+.fi
+.SH 関連項目
+\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.67 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。