說我有一個命令行C程序當前正在執行,並且我想要讀取一個文件或在同一個目錄中執行另一個二進制文件 - 我如何才能找出哪個目錄是?當前正在運行的C程序如何找出它所在的目錄?
請注意,我不是在尋找當前的工作目錄。用戶可能以任何以下方式(可能還有其他我不知道的)調用了我的原始程序。
- ../../program
- /家庭/亞光/程序
- PATH = $ PATH:/家庭/亞光程序
理想情況下我在找東西,將通過MinGW在unix系統和windows上工作。
說我有一個命令行C程序當前正在執行,並且我想要讀取一個文件或在同一個目錄中執行另一個二進制文件 - 我如何才能找出哪個目錄是?當前正在運行的C程序如何找出它所在的目錄?
請注意,我不是在尋找當前的工作目錄。用戶可能以任何以下方式(可能還有其他我不知道的)調用了我的原始程序。
理想情況下我在找東西,將通過MinGW在unix系統和windows上工作。
http://c-faq.com/osdep/exepath.html
據到C FAQ它不能可靠
強制要求CWD包含幫助程序可執行文件對於我認識的用戶(包括我)來說肯定是不能接受的。 – AProgrammer 2009-09-09 07:05:10
不知道你在AProgrammer上得到什麼...我沒有提供關於助手可執行文件的任何信息。如果程序需要以cwd作爲程序駐留的地方開始,那麼它完全有效地檢查cwd中存在的argv [0]的基名。正如mark40指出的那樣,從http://stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self-exe有更好的建議。重點是 - 無法可靠地找到正在執行的程序的位置,因此它應該作爲要求被移除,或者他可以盡力檢測。 – 2009-09-09 08:59:50
編輯鏈接到具有系統特定工作的其他線程 – 2009-09-09 09:05:34
的毗連GETCWD()和目錄名(argv的[0])
這將工作在第一和第二個案件,但不是在第三,除非我錯了。 – 2009-09-09 05:51:32
是的,這在第三種情況下不起作用。實際上argv [0]可以通過執行程序來設置任何東西,因此它不會對其進行中繼。一個很好的答案是在@ mark4o提供的鏈接中對您的問題發表評論。 – dimba 2009-09-09 06:01:00
完成參閱http:// stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self-exe – mark4o 2009-09-09 05:51:49