readlink:读符号链接
readlink系统调用用于获得符号链接的目标。它有三个参数:符号链接的路径,接收链接对象的缓冲以及这个缓冲的长度。不同寻常的是,readlink 不会在填充的目标路径最后添加 NUL 字符。不过,它会返回对象路径的字符数量,这使得为字符串添加 NUL 结尾变得很简单。
如果 readlink 第一个参数指向一个文件而不是符号链接时,readlink 设 置errno 为 EINVAL 并返回 -1。
代码 8.9 中的小程序打印出了命令行指定的符号链接的目标对象。
代码 8.9 (print-symlink.c) 打印符号链接的目标对象
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
int main (int argc, char* argv[])
{
char target_path[256];
char* link_path = argv[1];
/* 尝试读符号链接的目标对象。 */
int len = readlink (link_path, target_path, sizeof (target_path));
if (len == -1) {
/* 调用失败。*/
if (errno == EINVAL)
/* 报告它不是一个符号链接。 */
fprintf (stderr, “%s is not a symbolic link\n”, link_path);
else
/*其它错误发生;打印通用错误消息。*/
perror (“readlink”);
return 1;
}
else {
/* 目标路径遇NUL字符则停止。*/
target_path[len] = ‘\0’;
/* 打印它。 */
printf (“%s\n”, target_path);
return 0;
}
}
举例来说,您可以建立一个符号链接并使用 print-symlink 读回它的目标:
% ln -s /usr/bin/wc my_link % ./print-symlink my_link /usr/bin/wc