Объединить параметры с аргументами getopt
Привет, я пишу программу, которая принимает несколько параметров из командной строки в c. Вот некоторые из вариантов:
-l counts number of lines in file
-w counts words in file
-c counts characters in file
чтобы заставить их работать, вы можете сделать:
./program -l file.txt
./program -w file.txt
./program -c file.txt
однако я хочу объединить их так, чтобы несколько вариантов по-прежнему работали как надо. например:
./program -lwc file.txt
будет считать строки, слова и файлы AND,
./program -lw file.txt
будет считать строки и слова,
./program -cl file.txt
будет считать символы и строки и т. д. Я просто не могу понять, как это сделать. это мой код для аргументов:
while ( ( c = getopt( argc, argv, "c:w:l:" ) ) != -1 ) { /* get options */
switch ( c ) {
case 'c':
cflag = 1;
break;
case 'w':
wflag = 2;
break;
case 'l':
lflag = 3;
break;
}
}
это просто изменение вариантов вокруг, но это все еще не работает. с кодом, который я имею сейчас, объединение двух вариантов приводит к ошибке сегмента. любая помощь приветствуется
2 ответа
Как сказал Йенс Гастдт: уберите двоеточия из опций, чтобы они не принимали аргумент. Затем, когда обработка опций завершена (т.е. getopt
возвращенный -1
), проверить, если optind
меньше чем argc
это значит, что был дополнительный аргумент (ваше имя файла). Как это:
/* after the while-loop */
if(optind < argc){
fileName = argv[optind];
optind++;
}else{
perror("No file specified");
return -1;
}
когда getopt
готово optind
указывает на первую запись в argv
это не было обработано getopt
,