readlink 或 readlinkat 子例程
用途
阅读符号链接的内容。
库
标准 C 库 (libc.a)
语法
#include <unistd.h>
int readlink ( Path, Buffer, BufferSize)
const char * Path;
char * Buffer;
size_t BufferSize;
int readlinkat ( DirFileDescriptor, Path, Buffer, BufferSize )
int DirFileDescriptor;
const char * Path;
char * Buffer;
size_t BufferSize;描述
readlink 和 readlinkat 子例程在 Buffer 参数中指定的缓冲区中复制由 Path 参数命名的符号链接的内容。 BufferSize 参数指示缓冲区的大小 (以字节为单位)。 如果符号链接的实际长度小于 BufferSize 参数中指定的字节数,那么复制到缓冲区中的字符串将以 null 结束。 如果符号链接的实际长度大于在 缓冲大小 参数中指定的字节数,那么将返回错误。 符号链接的长度不能超过 1023 个字符或 PATH_MAX 常量的值。 PATH_MAX 在 limits.h 文件中定义。
如果 DirFileDescriptor 参数为 AT_FDCWD 或 路径 为绝对路径名,则 readlinkat 子程序等同于 readlink 子程序。 如果 DirFileDescriptor 是一个已打开目录的有效文件描述符,且 Path 是一个相对路径名,则 Path 将被视为相对于与 DirFileDescriptor 参数关联的目录,而不是当前工作目录。
如果 DirFileDescriptor 打开时没有使用 PATH_MAX open 标志,则子程序会使用目录的当前权限来检查是否允许对该目录进行搜索。 如果该目录是使用 PATH_MAX open 标志打开的,那么子例程不会对该目录执行检查。
参数
| 项 | 描述 |
|---|---|
| DirFileDescriptor | 指定打开的目录的文件描述符。 |
| 路径 | 指定目标文件或目标目录的路径名。 如果 DirFileDescriptor 指定,并且 Path 是一个相对路径名,那么 Path 将被视为相对于由 DirFileDescriptor. |
| 缓冲区 | 指向该用户缓冲区。 缓冲区应该至少与 BufferSize 参数一样大。 |
| BufferSize | 指定缓冲区的大小。 如果缓冲区中有空间,那么该链接的内容将以空值终止。 |
返回值
成功完成后, readlink 和 readlinkat 子例程将返回放入缓冲区中的字符数 (不包括任何终止空字符) 的计数。 如果 readlink 或 readlinkat 子程序不成功,缓冲区不会被修改,将返回 -1 的值,并设置 errno 全局变量来指示错误。
错误代码
如果下列其中一项或两项为 true ,那么 readlink 和 readlinkat 子例程将失败:
| 项 | 描述 |
|---|---|
ENOENT |
由 Path 参数指定的文件不存在,或者路径指向空字符串。 |
EINVAL |
由 路径 参数命名的文件不是符号链接。 |
ERANGE |
符号链接中的路径名长于 BufferSize 值。 |
如果以下一个或多个子例程为 true ,那么 readlinkat 子例程不成功:
| 项 | 描述 |
|---|---|
EBADF |
路径参数没有指定绝对路径,并且 DirFileDescriptor 参数既不是 AT_FDCWD ,也不是有效的文件描述符。 |
ENOTDIR |
路径参数没有指定绝对路径,而且 DirFileDescriptor 参数既不是 AT_FDCWD ,也不是与目录相关的文件描述符。 |
readlink 和 readlinkat 子例程也可能由于其他错误而失败。
如果在系统上安装了网络文件系统 (NFS) ,那么如果满足以下条件,那么 readlink 和 readlinkat 子例程也可能失败:
| 项 | 描述 |
|---|---|
ETIMEDOUT |
连接已超时。 |