REALPATH - Linux手册页
Linux程序员手册 第3部分
更新日期: 2017-09-15
名称
realpath-返回规范化的绝对路径名
语法
#include <limits.h> #include <stdlib.h> char *realpath(const char *path, char *resolved_path);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
realpath():
- _XOPEN_SOURCE>= 500 || / * Glibc自2.19起:* / -_DEFAULT_SOURCE || / * Glibc版本
说明
realpath()扩展所有符号链接,并解析对以path命名的以null终止的字符串中的/./、/../和其他aq / aq字符的引用,以生成规范化的绝对路径名。生成的路径名将以null终止的字符串形式存储(最多PATH_MAX个字节),存储在由resolve_path指向的缓冲区中。结果路径将没有符号链接,/。/或/../组件。
如果将resolve_path指定为NULL,则realpath()使用malloc(3)分配最多PATH_MAX字节的缓冲区以保存已解析的路径名,并返回指向该缓冲区的指针。调用者应使用free(3)释放此缓冲区。
返回值
如果没有错误,realpath()将返回一个指向resolve_path的指针。
否则,它返回NULL,数组resolve_path的内容未定义,并设置errno来指示错误。
错误说明
- EACCES
- 路径前缀的一部分的读取或搜索权限被拒绝。
- EINVAL
- 路径为NULL。 (在2.3之前的glibc版本中,如果resolve_path为NULL,也会返回此错误。)
- EIO
- 从文件系统读取时发生I / O错误。
- ELOOP
- 翻译路径名时遇到太多符号链接。
- ENAMETOOLONG
- 路径名的一部分超过NAME_MAX个字符,或者整个路径名超过PATH_MAX个字符。
- ENOENT
- 命名文件不存在。
- ENOMEM
- 内存不足。
- ENOTDIR
- 路径前缀的组成部分不是目录。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
realpath() | Thread safety | MT-Safe |
遵循规范
4.4 BSD,POSIX.1-2001。
POSIX.1-2001说,如果resolve_path为NULL,则行为是实现定义的。 POSIX.1-2008指定此页中描述的行为。
备注
在4.4BSD和Solaris中,路径名长度的限制为MAXPATHLEN(位于中)。 SUSv2规定了pathconf(3)函数中发现或提供的PATH_MAX和NAME_MAX。一个典型的源片段是
#ifdef PATH_MAX path_max = PATH_MAX; #else path_max = pathconf(path, _PC_PATH_MAX); if (path_max <= 0) path_max = 4096; #endif
(但请参阅"错误"部分。)
GNU extensions
如果调用失败并显示EACCES或ENOENT,并且resolve_path不为NULL,则在resolve_path中返回不可读或不存在的路径前缀。
BUGS
此功能的POSIX.1-2001标准版本在设计上已被破坏,因为无法确定输出缓冲区resolve_path的合适大小。根据POSIX.1-2001,大小为PATH_MAX的缓冲区就足够了,但是PATH_MAX不必是定义的常数,可能必须使用pathconf(3)获得。询问pathconf(3)并没有真正的帮助,因为POSIX一方面警告pathconf(3)的结果可能很大且不适合内存分配,另一方面,pathconf(3)可能会将-1返回到表示PATH_MAX没有边界。在POSIX.1-2001中未标准化但在POSIX.1-2008中标准化的resolve_path == NULL功能可以避免此设计问题。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。