OSDN Git Service

(split) LDP: Update release pages based on LDP 3.54 release
[linuxjm/LDP_man-pages.git] / release / man2 / readlink.2
index ff021d2..66e084c 100644 (file)
@@ -1,6 +1,8 @@
 .\" Copyright (c) 1983, 1991 The Regents of the University of California.
+.\" And Copyright (C) 2011 Guillem Jover <guillem@hadrons.org>
 .\" 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 2013\-07\-18 Linux "Linux Programmer's Manual"
+.SH 名前
+readlink \- シンボリックリンクの値を読む
+.SH 書式
+\fB#include <unistd.h>\fP
 .sp
-.BI "ssize_t readlink(const char *" path ", char *" buf ", size_t " bufsiz );
+\fBssize_t readlink(const char *\fP\fIpath\fP\fB, char *\fP\fIbuf\fP\fB, size_t
+\fP\fIbufsiz\fP\fB);\fP
 .sp
 .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
+_BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE\ >=\ 200112L
 .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
-¤¬Àµ¤Ç¤Ê¤¤¡£
+.SH 説明
+\fBreadlink\fP()  は \fIpath\fP で与えられたシンボリックリンクの内容を \fIbuf\fP バッファーへ格納する、 \fIbuf\fP のサイズは
+\fIbufsiz\fP である。 \fBreadlink\fP()  は NULL バイトを \fIbuf\fP に追加しない。
+その内容全てを格納するのにバッファーが小さ過ぎる場合は、 (\fIbufsiz\fP バイトの長さに) 内容を切り詰める。
+.SH 返り値
+成功すると、 \fBreadlink\fP()  は \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
+An I/O error occurred while reading from the filesystem.
+.TP 
+\fBELOOP\fP
+パス名にシンボリックリンクが多すぎる。
+.TP 
+\fBENAMETOOLONG\fP
+パス名かパス名の一部分が長過ぎる。
+.TP 
+\fBENOENT\fP
+その名前のファイルが存在しない。
+.TP 
+\fBENOMEM\fP
+十分なカーネルメモリーがない。
+.TP 
+\fBENOTDIR\fP
+パスのディレクトリ部分がディレクトリでない。
+.SH 準拠
+4.4BSD (\fBreadlink\fP()  は 4.2BSD で初めて登場した), POSIX.1\-2001.
+.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 が定義されることが保証されていないからである。
+.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("lstat");
+        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), \fBreadlinkat\fP(2), \fBstat\fP(2), \fBsymlink\fP(2),
+\fBpath_resolution\fP(7), \fBsymlink\fP(7)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。