-.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/ に書かれている。