ОК, я искал и нашел следующие две темы StackOverflow, которые привели меня в правильном направлении:
Помощники синтаксического анализа аргументов для C / UNIX
Передача аргументов в программу C из командной строки
ПРИМЕЧАНИЕ. ВСЕ КОДЫ - ПСЕВДО-КОД.БУДЕТ ПОСТАВЛЯТЬ СОВМЕСТИМЫЙ КОД, КОГДА ЭТО РАБОТАЕТ.
Тем не менее, я все еще не совсем понимаю, как использовать getopt_long () в C. Программа, которую я пишу, определяется как имеющая следующие возможные теги (но может включатьстолько, сколько вам абсолютно необходимо, заполняя остальные пустыми значениями):
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 через командную строку.