|
HOME > Linux Tips ( 目次 ) > Linux コマンド 一覧表 > r > realpath - ライブラリコールの説明 realpath - ライブラリコールの説明 - Linux コマンド集 一覧表名前realpath - 正規化された絶対パス名を返す 書式
#include <limits.h>#include <stdlib.h> 説明realpath()は pathとして与えられた NULL で終る文字列の中にある すべてのシンボリックリンクを展開し '/./', '/../'による参照や余分な '/'を解決して、正規化された絶対パス名を resolved_pathというバッファーの中に格納する。 このバッファーのサイズは PATH_MAXである。 結果として返るパスの中には、シンボリックリンクや '/./', '/../'といった要素は含まれない。 返り値
エラーがなかった場合、
realpath()は
resolved_pathへのポインターを返す。
エラー
注意realpath()の glibc の実装では非標準の拡張がなされている。 resolved_pathに NULL が指定されると、 realpath()は malloc(3) を使って解決したパス名を保持するためのバッファを 最大で PATH_MAX バイトまで割り当て、 このバッファへのポインタを返す。 呼び出し元は、 free(3) を使ってこのバッファを解放すべきである。 バグこの関数の使用は避けること。設計段階から問題があるからだ。 (非標準の "resolved_path==NULL"の拡張機能を使わない限り) 出力バッファ resolved_pathの適切なサイズを決定することができないからである。 POSIX ではバッファ・サイズとして PATH_MAX は十分だとされているが、 PATH_MAX は定義済の定数である必要はなく、 pathconf()を使って得られる値であってもよいことになっている。 pathconf()からバッファ・サイズを取得したとしても必ずしも十分ではない。 なぜなら、 pathconf()の返り値が大き過ぎて適切にメモリを確保することができないかもしれない と POSIX では警告されているし、 pathconf()は PATH_MAX に制限がないことを示す -1 を返すかもしれないからである。 libc4 と libc5 の実装はバッファ・オーバーフローの可能性を持っている (libc-5.4.13 で修正されたが)。したがって、mount のような set-user-ID されるプログラムでは、この関数相当の関数を自前で持つ必要がある。 歴史realpath()関数は 4.4BSD で初めて登場した (Jan-Simon Pendry により提供された)。 この関数が Linux に登場したのは libc 4.5.21 である。 準拠
4.4BSD, POSIX.1-2001.
#ifdef PATH_MAX path_max = PATH_MAX; #else path_max = pathconf (path, _PC_PATH_MAX); if (path_max <= 0) path_max = 4096; #endif 4.4BSD、Linux、SUSv2 では、返り値は常に絶対パス名である。 Solaris では、 引き数 path が相対パスの場合、返り値が相対パスになることがある。 realpath ()のプロトタイプ宣言は、 libc4 と libc5 では <unistd.h> にあるが、 それ以外の環境ではいずれも <stdlib.h> にある。 関連項目
readlink
(2),
canonicalize_file_name
(3),
getcwd
(3),
pathconf
(3),
sysconf
(3)
|
|