other versions
other sections
READLINK(2) | Linux Programmer's Manual | READLINK(2) |
名前¶
readlink - シンボリックリンクの値を読む書式¶
#include <unistd.h>glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
_BSD_SOURCE ||
_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED ||
_POSIX_C_SOURCE >= 200112L
説明¶
readlink() は path で与えられたシンボリックリンクの内容を buf バッファーへ格納する、 buf のサイズは bufsiz である。 readlink() は NULL バイトを buf に追加しない。 その内容全てを格納するのにバッファーが小さ過ぎる場合は、 ( bufsiz バイトの長さに) 内容を切り詰める。返り値¶
成功すると、 readlink() は buf に格納されたバイト数を返す。 エラーの場合、-1 を返し、 errno にエラーを示す値を設定する。エラー¶
- EACCES
- パスのディレクトリ部分に検索許可が与えられていない ( path_resolution(7) も参照すること)。
- EFAULT
- buf がプロセスに割り当てられたアドレス空間の外を指している。
- EINVAL
- bufsiz が正でない。
- EINVAL
- 指定したファイルがシンボリックリンクでない。
- EIO
- ファイルシステムの読み込み中に I/O エラーが起こった。
- ELOOP
- パス名にシンボリックリンクが多すぎる。
- ENAMETOOLONG
- パス名かパス名の一部分が長過ぎる。
- ENOENT
- その名前のファイルが存在しない。
- ENOMEM
- 十分なカーネルメモリーがない。
- ENOTDIR
- パスのディレクトリ部分がディレクトリでない。
準拠¶
4.4BSD ( readlink() は 4.2BSD で初めて登場した), POSIX.1-2001.注意¶
バージョン 2.4 以前の glibc (バージョン 2.4 を含む) では、 readlink() の返り値の型は int で宣言されていた。現在では、返り値の型は ssize_t である (返り値 ssize_t は POSIX.1-2001 で (新たに) 必須となった)。例¶
以下のプログラムは、 readlink() が必要とするバッファを、 lstat() が提供する情報に基づいて動的に割り当てる。 また、両方の呼び出し間で競合条件がないことを保証している。#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>\n", 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\n"); 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()\n"); exit(EXIT_FAILURE); } linkname[sb.st_size] = '\0'; printf("'%s' points to '%s'\n", argv[1], linkname); exit(EXIT_SUCCESS); }
関連項目¶
readlink(1), lstat(2), readlinkat(2), stat(2), symlink(2), path_resolution(7), symlink(7)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2011-09-20 | Linux |