OK,我已搜查,發現我開始在正確的方向以下兩個StackOverflow的主題:getopt_long() - 使用它的正確方法?
Argument-parsing helpers for C/UNIX
Pass arguments into C program from command line
注意:所有代碼是僞代碼。它會在可編程代碼發佈後運行。
但是,我仍然完全困惑於如何在C中使用getopt_long()。我正在編寫的程序被定義爲具有以下可能的標記(但可以包括儘可能多的,你絕對需要的,填補其餘在空值):
id3tagEd filename -title "title" -artist "artist" -year 1991 -comment "comment" -album "album" -track 1
現在,從我讀的,我需要利用一個結構的長選項,正確的?如果是這樣,我沿着這行寫的東西:
struct fields field =
{
char *[] title;
char *[] artist;
char *[] album;
int year;
char *[] comment;
int track;
}
static struct options long_options[] =
{
{"title", 0, &field.title, 't'},
{"artist", 0, &field.artist, 'a'},
{"album", 0, &field.album, 'b'},
{"year", 0, &field.year, 'y'},
{"comment", 0, &field.comment, 'c'},
{"track", 0, &field.track, 'u'},
{0, 0, 0, 0}
}
現在,從我收集,我將通過這個稱之爲:
int option_index = 0;
int values = getopt_long(argc, argv, "tabycu", long_options, &option_index);
從這裏,我能嚴格使用字段結構和做我需要在我的程序內?但是,如果是這樣的話,有人可以解釋整個long_options結構嗎?我閱讀手冊頁等,而我只是完全困惑。通過重讀手冊頁,我可以看到我可以將變量設置爲null,並且應該將我的所有選項要求設置爲「required_argument」?然後通過while()循環設置結構?但是,我看到使用了optarg。這是由getopt_long()設置的嗎?還是從示例中缺失?
最後一個問題,我將始終有一個未命名的必需選項:文件名,我只是使用argv [0]來獲得訪問權限? (因爲我可以認爲它會是第一個)。
在附註中,這與作業問題有關,但它與解決它無關,它更基本,必須先通過命令行理解C中的參數傳遞和解析。
所示的結構定義不會編譯。請提供可編譯的代碼。 –
'char * [] title;'不是有效的聲明。嘗試'char * title [];'請注意'&field.title'會返回一個'char ***',這可能不是你想要的。 –
查看getopt(3)和getopt_long(3)的手冊頁,兩者都有示例。 –