READLINK(2) | FreeBSD System Calls Manual | READLINK(2) |
名称
readlink, readlinkat — シンボリックリンクの値を読み込むライブラリ
Standard C Library (libc, -lc)書式
#include < unistd.h> ssize_t
readlink( const char *restrict path, char *restrict buf, size_t bufsiz);
ssize_t
readlinkat( int fd, const char *restrict path, char *restrict buf, size_t bufsize);
解説
readlink() システムコールは、 bufsiz サイズであるバッファ buf 内にシンボリックリンク path の内容を配置します。 readlink() システムコールは、 buf の末尾に NUL 文字を追加しません。readlinkat() システムコールは、 path が相対パスを指定する場合を除いて、 readlink() と同等です。この場合、内容が、カレントワーキングディレクトリの代わりにファイル記述子 fd に関連しているディレクトリに相対的に読み込まれるシンボリックリンクです。 readlinkat() が、 fd パラメータの特別な値 AT_FDCWD を渡されるなら、カレントワーキングディレクトリが、使用され、振る舞いは、 readlink() への呼び出しと同じです。
戻り値
呼び出しが正常に完了した場合、バッファ内に配置した文字数を返します。エラーが起きた場合は、-1 を返し、エラーコードがグローバル変数 errno に設定されます。エラー
readlink() システムコールは、次の場合に失敗します:- [ ENOTDIR]
- パスの構成要素中にディレクトリ以外のものが含まれています。
- [ ENAMETOOLONG]
- パス名の構成要素が 255 文字を越えているか、またはパス名全体が 1023 文字を越えています。
- [ ENOENT]
- 指定されたファイルが存在しません。
- [ EACCES]
- 指定されたパスには、検索が許可されていないディレクトリが含まれています。
- [ ELOOP]
- パス名を変換するときに検出されたシンボリックリンクが多すぎます。
- [ EINVAL]
- 指定のファイルがシンボリックリンクではありません。
- [ EIO]
- ファイルシステムから読み込む間に入出力エラーが発生しました。
- [ EFAULT]
- buf 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。
readlink() によって返されたエラーに加えて readlinkat() は、次の場合に失敗します:
- [ EBADF]
- path 引数が、絶対パスを指定していません、そして fd 引数は、 AT_FDCWD でもなく検索のためにオープンされた有効なファイル記述子でもありません。
- [ ENOTDIR]
- path 引数が、絶対パスではありません、そして fd が、 AT_FDCWD でもなくディレクトリに関連しているファイル記述子でもありません。
規格
readlinkat() システムコールは、The Open Group Extended API Set 2 仕様に適合しています。歴史
readlink() システムコールは、 4.2BSD で登場しました。 readlinkat() システムコールは、 FreeBSD 8.0 で登場しました。April 10, 2008 | FreeBSD |