Нечто подобное можно использовать для получения флагов командной строки -a
или -F
и дополнительных аргументов, *.c
*.c
будут расширены во все имена файлов, которые имеют .c
расширение.Если имеется 10 подходящих файлов, argc
будет 12.
Командная строка может выглядеть как ./pgm -a *.c
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int flaga = 0;
int flagF = 0;
int flagi = 0;
int flagl = 0;
int flag1 = 0;
int c = 0;
int each = 0;
if ( argc == 1) {
fprintf(stderr, "Usage:\t%s [-a] [-F] [-i] [-l] [-1] [arg...]\n", argv[0]);
return 1;
}
while((c = getopt(argc, argv, "laFi1")) != -1) {
switch(c) {
case 'a':
flaga = 1;
break;
case 'F':
flagF = 1;
break;
case 'i':
flagi = 1;
break;
case 'l':
flagl = 1;
break;
case '1':
flag1 = 1;
break;
default:
fprintf(stderr
, "Usage:\t%s [-a] [-F] [-i] [-l] [-1] [arg...]\n"
, argv[0]);
return 1;
}
}
if ( flaga) {
printf ( "processed: -a\n");
}
if ( flagF) {
printf ( "processed: -F\n");
}
if ( flagi) {
printf ( "processed: -i\n");
}
if ( flagl) {
printf ( "processed: -l\n");
}
if ( flag1) {
printf ( "processed: -1\n");
}
if ( optind < argc) {
for ( each = optind; each < argc; each++) {
printf ( "argv[%d] %s\n", each, argv[each]);
}
}
return 0;
}