UNIX编程-获取当前进程执行路径

Posted by 周思进 on May 30, 2021

问题场景:获取当前进程的执行路径

方式一

直接通过 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 接口一样,如下:

image

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” 不同的是,前者永远获取的是这个执行文件的绝对路径,而不管其是在什么路径下执行。