2011-03-04 42 views
4

比方說,我做的是被稱爲像這樣一個C程序:的Getopt - 文件名作爲參數

./something -d dopt filename 

所以-d是一個命令,dopt是一個可選參數-dfilename是一個參數./something,因爲我也可以撥打./something filename

什麼是getopt窗體來表示獲取文件名?

+0

這裏沒有一個。 'getopt'獲取_options_,'filename'不在這種情況下(這對於你所顯示的命令的兩個調用都是必需的)。 – ldav1s

回答

4

使用通常的方式optstring "d:"

捕捉-d doptoptarg。然後看看optind(與argc比較),它告訴你是否還有任何非選項參數。如果是這樣,你的文件名是第一個。

getopt沒有具體告訴你什麼是非選項參數或檢查數字。它只是告訴你它們從哪裏開始(如果你處於GNU的非嚴格POSIX模式,首先將它們移動到參數數組的末尾)

2

檢查如何grep does it。在main()末,你會發現:

if (optind < argc) 
{ 
    do 
    { 
     char *file = argv[optind]; 
     // do something with file 
    } 
    while (++optind < argc); 
} 

optind是由getopt的發現命令行選項的數量。所以這個條件/循環結構可以處理用戶列出的所有文件。