全部博文(47)
2013年(47)
分类: LINUX
2013-07-10 14:09:12
readlink系统调用用于获得符号链接的目标。它有三个参数:符号链接的路径,接收链接对象的缓冲以及这个缓冲的长度。不同寻常的是,readlink 不会在填充的目标路径最后添加 NUL 字符。不过,它会返回对象路径的字符数量,这使得为字符串添加 NUL 结尾变得很简单。
如果 readlink 第一个参数指向一个文件而不是符号链接时,readlink 设 置errno 为 EINVAL 并返回 -1。
代码 8.9 中的小程序打印出了命令行指定的符号链接的目标对象。
代码 8.9 (print-symlink.c) 打印符号链接的目标对象
#include#include #include 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