如何从内部找到C++ Linux程序的完整路径?

Sha*_*ath 16 c++ linux

我有这个要求,我需要从内部找到C++程序的完整路径.对于Windows,我有以下解决方案.argv [0]可能包含也可能不包含完整路径.但我需要确定.

TCHAR drive[_MAX_DRIVE], dir[_MAX_DIR], base[_MAX_FNAME], ext[_MAX_EXT];
TCHAR fullPath[255+1];
_splitpath(argv[0],drive,dir,base,ext);
SearchPath(NULL,base,ext,255,fullPath,NULL);
Run Code Online (Sandbox Code Playgroud)

什么是上述代码的Linux(gcc)等价物?很想看到可移植的代码.

Ker*_* SB 16

在Linux(Posix?)上,您有一个/proc/self/exe链接到可执行文件完整路径的符号链接.

在Windows上,使用GetModuleFileName.

永远不要依赖argv[0],不保证任何有用的东西.

请注意,路径和文件系统不是语言的一部分,因此必然是与平台相关的功能.


olo*_*ney 8

这个问题的最佳答案列出了一大堆操作系统的技术:

在没有/ proc/self/exe的情况下查找当前可执行文件的路径


Met*_*est 5

string get_path( )
{
        char arg1[20];
        char exepath[PATH_MAX + 1] = {0};

        sprintf( arg1, "/proc/%d/exe", getpid() );
        readlink( arg1, exepath, 1024 );
        return string( exepath );
}
Run Code Online (Sandbox Code Playgroud)

  • 安全问题.修复:`readlink(arg1,exepath,sizeof(exepath));` (2认同)