readlink()函数读取符号结果不一致问题

来源:互联网 发布:热血虎卫源码 编辑:程序博客网 时间:2024/06/05 11:05

readlink()函数用于读取相关路径下的连接符号,并将其存储于buf中,但在某种情况下也会存在读取连接符号并非是我们预期所要结果,今天我们介绍一下这种情况。

#include <unistd.h>

ssize_t readlink(const char *path, char *buf, size_t bufsiz);

readlink()函数具体功能不在介绍。

现在我们列举/proc/self/exe目录下的符号连接情况。

[ ****self]$ pwd

/proc/self

[ ****self]  ls -l /proc/self/exe
lrwxrwxrwx. 1 ***  *** 0 Sep 17 01:00 /proc/self/exe -> /bin/ls

可以看出/proc/self/exe 存在边接符号,
readlink(“/proc/self/exe”, char *buf, size_t bufsiz);

执行结果,buf中存在字符结果为/bin/ls

但实际结果为:/home/***/readlink

所以readlink 在读取/proc/self/exe时会存在符号的不确定性,

/proc/self本身为当前运行进程ID的符号链接. readlink在读取此方面边接时要注意当前目录的变化。

原创粉丝点击