ash*_*ash 3 c++ linux directory macos
假设我的可执行文件位于/Users/test_user/appMac OSX 上,并且我从以下位置运行它/Users/test_user/Desktop/run_app:
Desktop run_app$ /Users/test_user/app/exec
Run Code Online (Sandbox Code Playgroud)
在我的 C++ 代码中,如何找到可执行文件位置的路径(在本例中为/users/test_user/app)?我需要在代码中引用此路径上的一些其他文件,并且不想在代码中放置绝对路径,因为某些用户可能会将文件夹放置在不同的位置。
man 3 dyld说:
_NSGetExecutablePath() 将主可执行文件的路径复制到缓冲区 buf 中。bufsize 参数最初应该是缓冲区的大小。如果路径复制成功,该函数返回 0。如果缓冲区不够大,则返回 -1,并且 * bufsize 设置为所需的大小。请注意, _NSGetExecutablePath() 将返回可执行文件的“路径”,而不是可执行文件的“真实路径”。也就是说,该路径可能是符号链接而不是真实的文件。对于深层目录,所需的总 bufsize 可能超过 MAXPATHLEN。
#include <mach-o/dyld.h>
#include <limits.h>
int main(int argc, char **argv)
{
char buf [PATH_MAX];
uint32_t bufsize = PATH_MAX;
if(!_NSGetExecutablePath(buf, &bufsize))
puts(buf);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6878 次 |
| 最近记录: |