在C 中尋找可執行檔的完整路徑
在C 和C 中,確定目前正在執行的程式的完整路徑具有挑戰性。這是因為包含程式名稱的 argv[0] 通常不提供完整路徑。
基於Unix 的系統
可靠地檢索可執行檔案的位置在具有「/proc」的Unix 系統上:
- 使用readlink("/proc/self/exe", buf, bufsize) (Linux)
- 使用readlink("/proc/curproc/file", buf, bufsize) (FreeBSD)
- 使用readlink("/proc/readlink("/proc/ self/path/a.out", buf, bufsize) (Solaris)
在沒有「/proc」的 Unix 系統上:
- 如果argv[0]以「/」開頭,則為絕對路徑。
- 如果argv[0] 包含“/”,則將其附加到目前工作目錄。
- 在 $PATH 指定的目錄中搜尋 argv[0] 作為執行檔。
Windows
在 Windows系統上,使用以下命令code:
GetModuleFileName(NULL, buf, bufsize);
其他注意事項
- 檢查可執行檔案是否是符號連結並相應地解析它(如果使用“/proc”方法則不需要在Linux 上)。
- 請注意,正確設定 argv[0] 是呼叫進程的責任,尤其是在不受信任的情況(例如 setuid 執行檔)。
以上是如何取得 C/C 中可執行檔的完整路徑?的詳細內容。更多資訊請關注PHP中文網其他相關文章!