MACOS/LINUX/WINDOWS C++ 获取当前可执行程序的完整路径

依赖本人写的多平台编译器宏判断:

C/C++ MACOS、Windows、Linux、HarmonyOS 平台宏判断-CSDN博客

MACOS头文件依赖:

#if defined(_MACOS)

#include <libproc.h>

#endif

#include <mach-o/dyld.h>

只需要链接 libSystem.dylib 就行了,不需要在编译器上面声明链接它,编译器会隐式自动链接。

源代码:

cpp 复制代码
    std::string GetFullExecutionFilePath() noexcept {
#if defined(_WIN32)
        char exe[8096]; /* MAX_PATH */
        GetModuleFileNameA(NULL, exe, sizeof(exe));
        return exe;
#elif defined(_MACOS)
        char path[PATH_MAX];
        uint32_t size = sizeof(path);
        if (_NSGetExecutablePath(path, &size) == 0) {
            return path;
        }

#if defined(PROC_PIDPATHINFO_MAXSIZE)
        char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
        proc_pidpath(getpid(), pathbuf, sizeof(pathbuf));
        return pathbuf;
#else
        return "";
#endif
#else
        char sz[PATH_MAX + 1];
        int dw = readlink("/proc/self/exe", sz, PATH_MAX);
        sz[dw] = '\x0';
        return dw < 1 ? "" : sz;
#endif
    }
相关推荐
czxyvX3 小时前
019-Linux-Socket编程-TCP
linux·tcp/ip
love530love9 小时前
Scoop 完整迁移指南:从 C 盘到 D 盘的无缝切换
java·服务器·前端·人工智能·windows·scoop
A.A呐9 小时前
【Linux第六章】进程状态和优先级
linux
iambooo10 小时前
Shell在日志分析与故障排查中的实战应用
linux·服务器·网络
一路往蓝-Anbo10 小时前
第 9 章:Linux 设备树 (DTS) ——屏蔽与独占外设
linux·运维·服务器·人工智能·stm32·嵌入式硬件
钛态10 小时前
Flutter for OpenHarmony:dio_cookie_manager 让 Dio 发挥会话管理能力,像浏览器一样自动处理 Cookie 深度解析与鸿蒙适配指南
android·linux·运维·flutter·ui·华为·harmonyos
王码码203510 小时前
Flutter for OpenHarmony:Flutter 三方库 bluez 玩转 Linux 风格的蓝牙操作(蓝牙底层互操作)
linux·运维·服务器·前端·flutter·云原生·harmonyos
A.A呐11 小时前
【Linux第七章】进程切换和命令行参数
linux
抓饼先生11 小时前
iceoryx编译和验证
linux·c++·零拷贝·iceoryx
栈低来信12 小时前
SLUB分配器
linux