Хорошо, я обыскал и нашел следующие две темы StackOverflow, которые начали меня в правильном направлении:
Аргумент-синтаксический анализ для C/UNIX
Передача аргументов в программу C из командной строки
ПРИМЕЧАНИЕ. ВСЕ КОД - PSEUDO-CODE. ПОЛУЧИТЕ ПОДЛИННЫЙ КОД, КОГДА ЭТО РАБОТАЕТ.
Тем не менее, я все еще полностью смущен тем, как использовать 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? Я читал страницы руководства и т.д., И я просто совершенно смущен. Перечитывая страницы man, я могу видеть, что я могу установить переменные в null и должен ли устанавливать все мои требования к параметрам "required_argument"? А затем установка структур через цикл while()? Тем не менее, я вижу, что optarg используется. Установлено ли это getopt_long()? Или это отсутствует в примере?
И последний вопрос, у меня всегда будет необязательная опция: filename, я бы просто использовал argv [0], чтобы получить доступ к этому? (Поскольку я могу предположить, что это будет первым).
С другой стороны, это связано с проблемой домашней работы, но это не имеет никакого отношения к ее исправлению, ее более фундаментальному, необходимо понять передачу аргументов и синтаксический анализ в C по командной строке.