我有这个要求,我需要从内部找到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],不保证任何有用的东西.
请注意,路径和文件系统不是语言的一部分,因此必然是与平台相关的功能.
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)