OS X的執行程序一般分為兩種。一種是控制台程序,一種是帶有GUI的OS X應用程序。
控制台程序往往就一個文件構成executable,而GUI應用通常是一個包(即文件夾),里面除了executable之外還有其它資源。
對於一個GUI程序來說,我們可以通過讀取Bundle來獲得資源文件。那么對於控制台程序來說,如果要獲得其執行時的路徑就很有必要了。
比如,我做一個OpenCL程序,那么往往會將OpenCL內核源文件與應用放在一起。
在OS X中獲得executable當前路徑的方法很簡單,首先引入頭文件——
#include <mach-o/dyld.h>
然后,調用
int _NSGetExecutablePath(char* buf, uint32_t* bufsize)
即可。
這個函數適用於iOS2.0及更高版本以及OS X10.2及更高版本。
下面提供代碼例子片段:
#include <mach-o/dyld.h> int main(void) { char path[512]; unsigned size = 512; _NSGetExecutablePath(path, &size); path[size] = '\0'; printf("The path is: %s\n", path); }
順便提一下,在Linux中要獲得當前程序的路徑使用readlink接口,引入頭文件<unistd.h>即可。其聲明為:
int readlink(const char * path ,char * buf,size_t bufsiz);
代碼片段:
#include <unistd.h> int main(void) { char path[512]; int size = readlink("/proc/self/exe", path, 512); path[size] = '\0'; printf("The path is: %s\n", path); }