在没有/proc/Self/exe的情况下查找当前可执行文件的路径

在没有/proc/Self/exe的情况下查找当前可执行文件的路径

在我看来,Linux很容易使用/proc/Self/exe。但是,我想知道是否有一种方便的方法可以在C/C+中找到具有跨平台接口的当前应用程序的目录。我见过一些项目与argv[0]混在一起,但看起来并不完全可靠。

如果您必须支持MacOSX,它没有/proc/,您会怎么做?使用#ifdefs隔离特定于平台的代码(例如NSBundle)?或者尝试从argv[0]、$path和诸如此类推断可执行文件的路径,这样可能会在边缘情况下发现bug?


凤凰求蛊
浏览 1695回答 3
3回答

慕容708150

一些特定于操作系统的接口:MacOSX:_NSGetExecutablePath() (男子3 DYLD)Linux:readlink /proc/self/exeSolaris:getexecname()FreeBSD:sysctl CTL_KERN KERN_PROC KERN_PROC_PATHNAME -1FreeBSD如果它有以下方案:readlink /proc/curproc/file(FreeBSD默认没有profs)NetBSD:readlink /proc/curproc/exe蜻蜓BSD:readlink /proc/curproc/file窗户:GetModuleFileName()带着hModule = NULL可移植(但不太可靠)的方法是使用argv[0]..虽然调用程序可以将其设置为任何内容,但按照惯例,它被设置为可执行文件的路径名或使用$PATH.一些炮弹,包括bash和ksh,设置环境变量“_"执行可执行文件的完整路径。在这种情况下,您可以使用getenv("_")为了得到它。但是,这是不可靠的,因为并不是所有的shell都会这样做,而且它可以设置为任何东西,或者是在执行程序之前没有改变它的父进程留下的。

尚方宝剑之说

检查一下在哪里库来自GregoryPakosz(它只有一个C文件);它允许您在各种平台上获得当前可执行文件的完整路径。目前,它可以在GitHub上作为回购工具使用。这里.
打开App,查看更多内容
随时随地看视频慕课网APP