Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取可执行文件的当前逻辑路径_C++_Linux - Fatal编程技术网

C++ 获取可执行文件的当前逻辑路径

C++ 获取可执行文件的当前逻辑路径,c++,linux,C++,Linux,在Linux上,如何获取正在运行的可执行文件的当前逻辑路径,即在路径中维护符号链接的路径 我知道我可以使用readlink/proc/self/exe获取物理路径,但是有没有办法获取逻辑路径 我编写了一个简单的测试程序test.cc,编译成一个名为test的可执行文件: 如果我有一个文件夹/home/mdkess/personal/foo符号链接到/home/mdkess/personal/foo-1.2.3,并从/home/mdkess/personal/foo运行可执行文件,程序将输出物理路

在Linux上,如何获取正在运行的可执行文件的当前逻辑路径,即在路径中维护符号链接的路径

我知道我可以使用readlink/proc/self/exe获取物理路径,但是有没有办法获取逻辑路径

我编写了一个简单的测试程序test.cc,编译成一个名为test的可执行文件:


如果我有一个文件夹/home/mdkess/personal/foo符号链接到/home/mdkess/personal/foo-1.2.3,并从/home/mdkess/personal/foo运行可执行文件,程序将输出物理路径/home/mdkess/personal/foo-1.2.3/test。如何让它输出逻辑路径,即/home/mdkess/personal/foo/test

我不认为这是重复的。我需要知道可执行文件是从哪里运行的,不仅仅是链接到它的所有东西或它的任何子文件夹。我同意这不是重复的。获取调用文件的逻辑路径与获取指向此文件的所有链接完全不同。我认为检查argv[0]是获取逻辑路径的最佳方法,如果argv[0]是相对的,则可能与getcwd配对。但cwd位可能不是一条合理的路径。正如您所指出的,readlink将为您提供真正的路径,但是……没有万无一失的机制。如果您被shell调用,argv[0]可以正常工作,但是调用execve的C程序可以在argv[0]中传递任何与可执行路径无关的内容。25年前,我就这样入侵了我的第一个unix系统;经验教训:不要信任argv[0]来确定远程连接到访问权限的任何内容或确定要读取的配置文件。
#include <iostream>
#include <unistd.h>

int main(int argc, char* argv[]) {
    char buf[256];
    readlink("/proc/self/exe", buf, sizeof(buf));
    std::cout << buf << std::endl;
    return 0;
}