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
    }
相关推荐
郝学胜-神的一滴1 天前
深入理解TCP连接的优雅关闭:半关闭状态与四次挥手的艺术
linux·服务器·开发语言·网络·tcp/ip·程序人生
CCPC不拿奖不改名1 天前
虚拟机基础:在VMware WorkStation上安装Linux为容器化部署打基础
linux·运维·服务器·人工智能·milvus·知识库搭建·容器化部署
fjh19971 天前
记一次奇怪的ssh公钥登录失败的情况
运维·ssh
一只自律的鸡1 天前
【Linux系统编程】文件IO 函数篇
linux·linux系统编程
dinga198510261 天前
linux上redis升级
linux·运维·redis
hzc09876543211 天前
Linux系统下安装配置 Nginx 超详细图文教程_linux安装nginx
linux·服务器·nginx
yaoxin5211231 天前
324. Java Stream API - 实现 Collector 接口:自定义你的流式收集器
java·windows·python
匀泪1 天前
云原生(nginx实验(2))
运维·nginx·云原生
RisunJan1 天前
Linux命令-ltrace(用来跟踪进程调用库函数的情况)
linux·运维·服务器
阿乐艾官1 天前
【 LVM 创建逻辑卷】
linux