我们日常测试中,有时候有些辅助程序文件比如一些配置文件需要放在主程序执行文件同样的位置,便于管理和调用,这时候我们就需要获取执行文件的绝对路径。

今天为大家总结分享不同操作系统下获取当前进程绝对路径的方法。

Windows系统

提供了获取当前进程加载模块的完整路径的接口。

DWORD WINAPI GetModuleFileName(
_In_opt_ HMODULE hModule, //模块句柄,可以是DLL模块或者一个应用程序的实例句柄,如果为NULL,该函数返回该应用程序完路径
_Out_ LPTSTR lpFilename, //存储路径的字符串缓冲区
_In_ DWORD nSize //装载到缓冲区的最大字符数量
);

调用示例:

char module_name[MAX_PATH];
GetModuleFileNameA(NULL, module_name, MAX_PATH);

以项目D:/test为例,则调用该接口后module_name存储的是text.exe文件的绝对路径:module_name="D:/test/Debug/test.exe"

Linux系统

Linux系统中有个符号链接:/proc/self/exe,它代表当前程序。

readlink是Linux系统中的一个常用工具,主要用于查找符号链接所指向的位置。

调用示例:

char link[MAX_PATH];
readlink("/proc/self/exe", link, MAX_PATH);

link存储当前进程的绝对路径。

MacOSX系统

提供了函数获取当前进程的路径。

int _NSGetExecutablePath(
char* buf, //存储路径的字符串缓冲区
uint32_t* bufsize //装载到缓冲区的最大字符数量
)

调用示例:

char buf[MAX_PATH];uint32_t size = MAX_PATH;
_NSGetExecutablePath(buf, &size);

buf存储当前进程的绝对路径。

317a3db6e1d7e5c54598eacd362a9680.png

Logo

前往低代码交流专区

更多推荐