OSDN Git Service

(split) LDP: Update README.JM
[linuxjm/LDP_man-pages.git] / release / man2 / readlink.2
index cf7acb8..4f26514 100644 (file)
@@ -1,4 +1,5 @@
 .\" Copyright (c) 1983, 1991 The Regents of the University of California.
 .\" Copyright (c) 1983, 1991 The Regents of the University of California.
+.\" And Copyright (C) 2011 Guillem Jover <guillem@hadrons.org>
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\"
 .\"     @(#)readlink.2 6.8 (Berkeley) 3/10/91
 .\"
 .\"
 .\"     @(#)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
 .\" 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
 .\"
 .\"
-.\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
-.\"         all rights reserved.
-.\" Translated 1997-12-12, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
-.\" 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
+.\"*******************************************************************
 .\"
 .\"
-.\"WORD:       symbolic link           ¥·¥ó¥Ü¥ê¥Ã¥¯¡¦¥ê¥ó¥¯
-.\"WORD:       buffer                  ¥Ð¥Ã¥Õ¥¡¡¼
-.\"WORD:       NUL                     ¥Ì¥ëʸ»ú
-.\"WORD:       global variable         ¥°¥í¡¼¥Ð¥ëÊÑ¿ô
-.\"WORD:       directory               ¥Ç¥£¥ì¥¯¥È¥ê
+.\" This file was generated with po4a. Translate the source file.
 .\"
 .\"
-.TH READLINK 2 2007-07-26 "Linux" "Linux Programmer's Manual"
-.SH Ì¾Á°
-readlink \- ¥·¥ó¥Ü¥ê¥Ã¥¯¡¦¥ê¥ó¥¯¤ÎÃͤòÆɤà
-.SH ½ñ¼°
-.B #include <unistd.h>
+.\"*******************************************************************
+.TH READLINK 2 2011\-09\-20 Linux "Linux Programmer's Manual"
+.SH 名前
+readlink \- シンボリックリンクの値を読む
+.SH 書式
+\fB#include <unistd.h>\fP
 .sp
 .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
 .sp
 .in -4n
-glibc ¸þ¤±¤Îµ¡Ç½¸¡ºº¥Þ¥¯¥í¤ÎÍ×·ï
-.RB ( feature_test_macros (7)
-»²¾È):
+glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参照):
 .in
 .sp
 .ad l
 .in
 .sp
 .ad l
-.BR readlink ():
-_BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _POSIX_C_SOURCE\ >=\ 200112L
+\fBreadlink\fP():
+.RS 4
+_BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE\ >=\ 200112L
+.RE
 .ad b
 .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?
 .\" 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
+パスのディレクトリ部分がディレクトリでない。
+.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 < 0) {
+        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[sb.st_size] = \(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.41 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。