前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代码中进程的绝对路径要怎么获取?

代码中进程的绝对路径要怎么获取?

作者头像
用户5521279
发布2019-06-02 16:32:13
1.3K0
发布2019-06-02 16:32:13
举报
文章被收录于专栏:搜狗测试搜狗测试

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

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

Windows系统

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

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

调用示例:

代码语言:javascript
复制
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系统中的一个常用工具,主要用于查找符号链接所指向的位置。

调用示例:

代码语言:javascript
复制
char link[MAX_PATH];
readlink("/proc/self/exe", link, MAX_PATH);

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

MacOSX系统

<mach-o/dyld.h>提供了函数获取当前进程的路径。

代码语言:javascript
复制
int _NSGetExecutablePath(
    char* buf, //存储路径的字符串缓冲区
    uint32_t* bufsize //装载到缓冲区的最大字符数量
    )

调用示例:

代码语言:javascript
复制
char buf[MAX_PATH];
uint32_t size = MAX_PATH;
_NSGetExecutablePath(buf, &size);

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Windows系统
  • Linux系统
  • MacOSX系统
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档