C artikler :: getopt - kommando-parameter-styring

Find ud af hvordan du programmerer indgivelsen af parametre til en kommando.

Når et Unix kommando bruges, indtastes en kommandoline på terminalen, konsolen eller anden forbindelse til Unix'en. Mange af kommandoerne er spækket med options, toggle og parametre som anvendes til at styre det job du vil køre. F.eks. ls, der viser filindholdet i Unix på et utal af varianter, styres ved parametre.

ls -a

ls -l

ls -w 40

De programmer vi selv laver, kan også have det behov at styres med parametre. Er det simple parametre som f.eks. et enkelt uden options el. lign. er der ingen grund til at vide noget om getopt() funktionen, men vil du bruge dem er der et library unistd.h til lige netop det formål. Lad os se på et eksempel der bevæger os igennem nogle muligheder med to optioner -a eller -b, der kun må bruges enten -a eller -b, ikke begge. Vi ser to optioner -f og -o der begge forventer en operand (en parameter til en option) der skal være filnavne med evt. sti foran. Endelig et antal ekstra parametre uden optioner.

/* getopt.c - Kommandoparameter decifrering */ #include <stdio.h> #include <unistd.h> extern char *optarg; extern int optind, optopt; int main(int argc, char *argv[]) { int c; int bflg=0, aflg=0, errflg=0; char *ifile; char *ofile; while ((c = getopt(argc, argv, ":abf:o:")) != -1) { printf("getopt() returnerede %c\n",c); switch(c) { case 'a': if (bflg) { fprintf(stderr ,"Option -%c der er allerede en option -b\n",c); errflg++; } else { printf("-%c godkendt\n",c); aflg++; } break; case 'b': if (aflg) { fprintf(stderr ,"Option -%c der er allerede en option -a\n",c); errflg++; } else { printf("-%c godkendt\n",c); bflg++; } break; case 'f': ifile = optarg; printf("-%c godkendt med operand %s\n",c,optarg); break; case 'o': ofile = optarg; printf("-%c godkendt med operand %s\n",c,optarg); break; case ':': /* -f eller -o uden operand */ fprintf(stderr ,"Option -%c kræver en operand\n", optopt); errflg++; break; case '?': fprintf(stderr ,"Unkendt option: -%c\n", optopt); errflg++; } } if (errflg) { fprintf(stderr, "usage:\n"); fprintf(stderr, "%s -ao arg path path\n",argv[0]); fprintf(stderr, "%s -a -o arg path path\n",argv[0]); fprintf(stderr, "%s -o arg -a path path\n",argv[0]); fprintf(stderr, "%s -a -o arg -- path path\n",argv[0]); fprintf(stderr, "%s -a -oarg path path\n",argv[0]); fprintf(stderr, "%s -aoarg path path\n",argv[0]); fprintf(stderr, "Alle ovenstående skulle være betragtet ens\n"); exit(2); } /* Ekstra parametre uden option */ for ( ; optind < argc; optind++) { printf(" access(argv[%d], R_OK)=%d\n" ,optind,access(argv[optind], R_OK)); /* Læse rettighed */ printf(" access(argv[%d], W_OK)=%d\n" ,optind,access(argv[optind], W_OK)); /* Skrive rettighed */ printf(" access(argv[%d], X_OK)=%d\n" ,optind,access(argv[optind], X_OK)); /* Execute rettighed */ printf(" access(argv[%d], F_OK)=%d\n" ,optind,access(argv[optind], F_OK)); /* Findes filen? */ } }

Ressourcer C Library opslag The Single UNIX® Specification, Version 2 Copyright © 1997 The Open Group GNU C Library Engelsk, med masser af gode og dybe artikler. Danske søgeord Find selv de bedste danske søgeord til din hjemmeside.
Produkter Bookingsystem
System for reservation af tid for behandlinger, aftaler, lokaler, udstyr, personale. Tilpasset lektionstimer. Udskriver arbejdsplaner og ugeskema for opslag. Statistik. Danmarks bedste pris nu kun kr. 1.695,-
HelpdeskEffektiviser din support-organisation med et Helpdesksystem. Fjern tidrøvere der forhindrer fokus på problemløsning. Lektionsplan Formidling af generelle information og specifikke lektioner fra undervisere til studerende/elever. Medlemssystem Medlemssystem online med administration af medlemskartotek, kontingentbetalinger, flettefiler m.m.
Styr selv Styr selv indholdet på dine hjemmesider med Content Management System.
Citat Mit sprogs grænser er mit univers grænser.

Ludvig Wittgenstein



Professionelle løsninger til Internettet. Webdesign, e-handel, cms, søgeoptimering, webhotel, analyse, Intranet mm.