C++编程实现获取当前可执行文件名称

发布时间:2026/11/12 18:07:42

C++编程实现获取当前可执行文件名称 、介绍在C开发中有时需要获取当前可执行文件的名称用来处理一些事务。那么在主流的平台上获取当前可执行文件名称的方法有哪些呢一般来说无论哪个平台下都分为以下几类使用接口使用配置文件或相关属性注册表等使用第三方库下面将分别在Windows和Linux两大主流平台上进行分析说明。二、Windows平台按照上面的三类划分在Windows平台上获取可执行文件名称的方法有1.系统接口1使用GetModuleFileName函数这是在Windows平台上推荐的用法123456789101112131415161718#include windows.h#include iostream#include stringintmain() {charexePath[MAX_PATH];DWORDlen GetModuleFileNameA(NULL, exePath, MAX_PATH);if(len 0) {std::cerr err code: GetLastError() std::endl;return1;}std::string fullPath(exePath);std::cout cur full path: fullPath std::endl;return0;}2使用C提供的_get_pgmptr函数来获取_pgmptr12345678910#include cstdlib#include iostreamintmain() {char* pgmptr nullptr;errno_t err _get_pgmptr(pgmptr);if(pgmptr ! nullptr) {std::cout full path: pgmptr std::endl;}return0;}2.配置文件及相关直接读取main函数中的argv[0],它一般只包括名字而不包括完整路径。这个简单就不举例了。读取环境变量或配置文件这需要程序中做一些特殊的输出或配置普通的可执行文件可能无法应用3.第三方库在Windows平台上有很多的第三方框架或库都提供了类似的机制如boost::dll::program_location()等。例程看后面。三、Linux平台Linux平台亦是如此但是它的实现方式更加丰富1.系统接口使用dladdr12345678910#include iostream#include dlfcn.hintmain() {Dl_info dl;if(dladdr((void*)main, dl) dl.dli_fname) {std::cout path: dl.dli_fname std::endl;}return0;}其它平台一些变种如Solaris中的getexecname()接口等2.配置文件及相关读取/proc/self/exe链接获取当前可执行文件名称12345678910111213#include iostream#include unistd.h#include limits.hintmain() {charexePath[PATH_MAX];ssize_t len readlink(/proc/self/exe, exePath,sizeof(exePath) - 1);if(len ! -1) {exePath[len] \0;std::cout full path: exePath std::endl;}return0;}读取/proc/self/cmdline12345678910111213#include iostream#include fstream#include stringintmain() {std::ifstream cmdline(/proc/self/cmdline);if(cmdline.is_open()) {std::string exePath;std::getline(cmdline, exePath,\0);std::cout full path: exePath std::endl;}return0;}使用main函数中的argv[0]不赘述gunlib中的program_name这个需要主动初始化有点类似Windows平台的特殊配置3.第三库1典型的就是使用Boost库中的boost::dll::program_location()看例子12345678#include iostream#include boost/dll/runtime_symbol_info.hppintmain() {boost::dll::fs::path fullPath boost::dll::program_location();std::cout full path: fullPath.string() std::endl;return0;}2其它一些特定系统上的库如libbsd等四、分析说明除了上面的分析的方法外另外还可以使用一些特殊的技巧来获取执行文件的名称比如使用调试的接口backstarce函数等等。通过上面的分析说明基本上可以看到它们的优缺点。对使用接口操作来说优点是安全稳定及准确但可能无法跨平台。而且可能有的平台上需要安装一些特定的库一般来说使用配置及相关的方法相对来说都比较准确通常包括完整的全路径。但缺点是依赖于特定的平台或系统而且有可能还需要权限。这点就限制了不少的应用特别是在某些裁剪的系统上的应用;使用第三方库的优点是应用上简单灵活多变。缺点是需要安装第三方库而且在编译时需要增加对相关的库的链接。对于一些小的工程就不太实用了。这里必须单独把使用argv[0]拿出来它作为一种很传统的获取可执行文件名称的方法在正式场景下不建议使用。因为影响它的因素比较多有可能名称根本就不对。所以还是要引起注意。五、总结其实在真正的应用中这种小功能的需求层出不穷。真正和用户打过交道的开发者就会明白用户有时候想得非常“野”让开发者有一种应接不暇的感觉。其实换位思考谁都想让软件的应用更方便快捷。一个小功能往往就会让用户感到软件的人性化。
延伸阅读

更多相关文章

2026/11/8 3:14:21

Anaconda环境创建失败全解析:从网络权限到Conda配置的根治方案

1. 问题现象与核心原因剖析 最近在帮几个刚入行的数据分析师和机器学习新手排查环境问题时,发现“Anaconda3无法创建环境”这个报错出现的频率相当高。表面上看,这只是个简单的命令执行失败,但背后牵扯到的原因五花八门,从网络权限…

2026/11/1 17:32:13

终极系统兼容性修复指南:一键解决所有Windows运行库问题

终极系统兼容性修复指南:一键解决所有Windows运行库问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 当您在Windows系统上运行软件时,…

2026/11/12 18:07:37

考电工证600题怎么网上查询复审延期流程

考电工证600题怎么网上查询复审延期流程 证书过期了不知道怎么复审延期,很多电工师傅在遇到这个问题时一脸懵。尤其像商丘这样的地方,工地上的电工证如果过期了,就可能被暂停作业,甚至影响工资发放。那问题来了, 考电工证600题…

2026/11/12 18:07:37

韩国签证电工证值不值得考?过期了怎么复审延期全解析

韩国签证电工证值不值得考?过期了怎么复审延期全解析 证书过期了不知道怎么复审延期?现在越来越多的电工、焊工、高处作业人员,尤其是像你这样在南阳劳务班组从事对外业务的负责人,会面临一个现实问题——韩国签证电工证到底值不值得考?更关键的是,如果…

2026/11/12 18:07:37

工地太忙根本没时间复习考试?电工证要怎么考聊城良心建议来了

工地太忙根本没时间复习考试?电工证要怎么考聊城良心建议来了 工地太忙根本没时间复习考试,这几乎是每个一线作业人员的日常。特别是在聊城这样的工程大市,电工作业是刚需,但电工证的报考流程和考试内容却让人一头雾水。尤其是对于那些在项目一线跑腿、没…

2026/11/12 18:07:37

山东办电工证多少钱培训机构怎么选

山东办电工证多少钱培训机构怎么选 急需特种作业证才能上岗找工作,你是不是也正被这个问题困扰?山东办电工证多少钱,这可能是你最关心的问题之一。但别光盯着价格,更要搞清楚怎么选靠谱的培训机构,怎么备考,怎么顺利拿到证,这才是关键。…

2026/11/12 18:07:36

弱电维修电工证怎么考 在哪考才能顺利复审

弱电维修电工证怎么考 在哪考才能顺利复审 证书过期了不知道怎么复审延期,你不是一个人。现在各行各业对持证上岗的要求越来越严格,尤其是像弱电维修电工这种涉及电力、通信和安防的岗位,如果没有合法有效的证书,别说工作,连面试都可能被拒之门外。很多…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/12 9:51:42

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑