2010-07-16 64 views
0

我想委託的基於特定參數是否存在爭論幾種可能的名單之一,沿着線:是否可以通過getopt_long參數列表向後移動?

./test --do-thing-1 --option-A=7 --common-option --option-B=2 # options C and D not valid 
./test --do-thing-2 --option-C=9 --common-option --option-D=1 # options A and B not valid 

我能想到的整齊地做到這一點,最好的辦法是有main()處理所有常見選項,並決定調用幾個函數中的哪一個來處理餘數。

請注意,我不想限制順序,以便通用選項只能先發生。

我的問題是,如果我解析參數第二次前重新optind 1,getopt_long段錯誤傳遞一個無效的字符串strncmp - 所以我想我不應該與OPTIND搞亂。

我有一個谷歌,並找不到任何參考是否有可能跳轉getopt_long參數列表(我知道它可能爲getopt),如果是,我該怎麼做?

我不想使用任何非標準庫。 (語言是純C,沒有C + +)

回答

1

我的問題是,我沒有將我的static struct option long_options[]數組的最後一行設置爲零,正確設置可以修復錯誤。

GNU getopt還要求將optind重置爲0而不是1以便正確地重置其內部狀態。

相關問題