问题场景:获取当前进程的执行路径
方式一
直接通过 getcwd 接口获取,代码如下:
#a.out 代码
int main(int argc, char const *argv[]) {
char buf[PATH_MAX] = {0};
(void)getcwd(buf, sizeof(buf));
printf("buf:%s\n", buf);
return 0;
}
方式二
读取符号链接文件 /proc/pid/cwd 所指向的路径,效果和上面调用 getcwd 接口一样,如下:
readlink 接口可以获取链接文件本身内容,即所指向的路径名,代码如下:
int main(int argc, char const *argv[]) {
char buf[PATH_MAX] = {0};
int ret = -1;
char tmp[256] = {0};
snprintf(tmp, sizeof(tmp), "/proc/%d/cwd", getpid());
ret = readlink(tmp, buf, sizeof(buf)-1);
if (ret == 1)
{
printf("readlink failed.\n");
return -1;
}
buf[ret] = '\0';
printf("abpath:%s\n", buf);
return 0;
}
方式三
链接文件 “/proc/self/exe” 和 “/proc/pid/cwd” 不同的是,前者永远获取的是这个执行文件的绝对路径,而不管其是在什么路径下执行。