C artikler :: getopt - kommando-parameter-styring

Du skal erklære disse tre variabler:

extern char *optarg; extern int optind, optopt;

Med getopt() sætter du op hvilke parametre med eller uden optioner du ønsker. I strengen ":abf:o:" angiver et kolon en parameter uden option ( hvor det ikke står bag et bogstav). En option uden parametre er defineret ved option -a og -b. Optioner der kræver en operand (en parameter efter en option) defineres med et bogstav efterfulgt af et kolon. Placer getopt() i en while-løkke, den vedbliver at returnere et option-tegn sålænge der findes nogen tilbage og -1 når der ikke er flere.

while ((c = getopt(argc, argv, ":abf:o:")) != -1) {

Hele kommandolinien, der i Unix ordnes til en tæller argc for hvor mange parametre der er i kommandolinien og argv som er et array af strenge med hver en parameter overføres til main(). getopt() tager parameter argc og argv og den streng med de specifikationer af parametre du ønsker.

Det er let at overskue optionerne ved at bruge switch til at behandle de enkelte optioner.

switch(c) { case 'a': ..kode.. case 'b': ..kode.. case 'f': ..kode.. . . .

Når dit program støder på en ukendt option returnerer getopt() ? og er derfor også let at putte ind som en case i switch. I sådant et tilfælde sættes optopt med optionen der ikke blev genkendt.

case '?': fprintf(stderr ,"Unkendt option: -%c\n", optopt); errflg++;

Når getopt() møder en option hvor der skal bruges en operand, som i specifikationen (f:) sættes operandværdien i optarg.

case 'f': ifile = optarg; printf("-%c godkendt med operand %s\n",c,optarg); break;

I tilfælde af at operanden savnes returnerer getopt() : og optopt sættes med optionen. Der kan vi også lave en case:

case ':': /* -f eller -o uden operand */ fprintf(stderr ,"Option -%c kræver en operand\n", optopt); errflg++; break;

Ekstra parametre uden optioner kan aflæses af optind.

/* 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? */ }

Når vi skal behandle parametre uden optioner kan access() blive handy. Den foretager et check på en fil's rettigheder udfra brugerens login, forudsat at parameteren skal være en filangivelse naturligvis. Du kan checke om der f.eks. er skriverettigheder til filen eller om den findes i forvejen etc.

De fire viste check med access() kan kombineres hvis du f.eks. ønsker at checke du både har læse- og skriverettigheder til filen ved R_OK || W_OK.

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 Det er ikke fordi ting er vanskelige, vi ikke tør. Det er fordi, vi ikke tør, ting er vanskelige.

Seneca



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