2008-09-24 106 views
3

如何將選項傳遞給可執行文件?有沒有比選擇布爾參數更簡單的方法?C++將選項傳遞給可執行文件

編輯:最後兩個答案建議使用參數。我知道我可以編寫一個可行的解決方案,但我寧願讓它們成爲選項。

編輯2:根據每個請求澄清,我將使用這個簡單的例子: 它處理參數是相當容易的,因爲它們會自動分析到一個數組中。

./printfile file.txt 1000 

如果我想知道該文件的名稱,用戶想打印什麼,我通過argv的訪問[1]。

現在怎麼這樣的情況:

./printfile file.txt 1000 --nolinebreaks 

用戶想打印文件,沒有換行符。這不是程序能夠運行所必需的(如要打印的文件名和行數),但用戶可以選擇使用(如果他/她想要)。現在我能做到這一點使用:

./printfile file.txt 1000 true 

的使用提示將告知第三個參數用於確定是否打印與換行符或沒有該文件的用戶。但是,這看起來很笨拙。

+0

你能否詳細說明一下?您是否在尋找:./a.out --arg1 = 2 --arg2 = 3或其他形式? – daniel 2008-09-24 02:58:17

回答

4

您似乎認爲以「--」開頭的「選項」與不帶「參數」的「選項」之間存在一些根本區別。唯一的區別在於你如何解析它們。

您可能值得花時間看看GNU的getopt()/getopt_long()選項解析器。它支持通過諸如--number-of-line-breaks 47之類的選項傳遞參數。

2

我用於傳遞信息的兩種方法:

1 /使用的命令行參數,它們比如getArgs變得更容易與特定的庫來處理。

2 /作爲環境變量,使用getenv。

11

命令行參數是要走的路。您可能需要考慮使用Boost.ProgramOptions來簡化此任務。

0

這個問題對於上下文來說並不是很清楚,只是你想要做的 - 你的意思是從C++程序中運行可執行文件?有幾個標準的C庫函數,其名稱如execl(),execv(),execve(),它們將選項作爲字符串或指向字符串數組的指針。還有system()接受一個字符串,它包含你在bash提示符,選項和所有內容中輸入的內容。

1

Pax在這裏有正確的想法。

如果您需要更徹底的雙向通信,請使用管道打開進程並將內容發送到標準輸入/監聽標準輸出。

-1

您可以將選項放在.ini文件中並使用GetPrivateProfileXXX API's創建一個類,該類可以從.ini中讀取要查找的程序選項的類型。

您還可以爲您的應用程序創建交互式shell以實時更改某些設置。

編輯: 從你的編輯,你不能只是解析每個選項尋找與該選項相關的特殊關鍵字是「可選」?

+0

GetPrivateProfile API僅適用於Windows。 – Ferruccio 2008-09-24 03:08:55

+0

是的,我想我可以簡單地將一些參數視爲可選參數。但是,我不得不相信有一個更優雅的方式來做到這一點? – user7545 2008-09-24 03:16:52

1

您也可以使用Window的PostMessage()函數。如果要發送選項的可執行文件已經運行,這非常方便。如果您對這種技術感興趣,我可以發佈一些示例代碼。

0

我喜歡popt庫。它是C,但也可以在C++中正常工作。

雖然它似乎不是跨平臺的。我發現,當我必須爲某些Linux軟件的Windows端口修改我自己的API兼容版本。

相關問題