This blog post has been published on 2010-11-01 and may be out of date.
In diesem Beispiel zeige ich, wie du Parameter in einem C-Programm einsetzen kannst…
/*
read_args.c
Achtung:
- bei Platzhaltern (*) !!! Wird hier noch nicht beruecksichtigt
- die Hilfe ist nur per '-h' und nicht '--help' aufrufbar
- Fehlermeldungen werden nicht ausgegeben
*/
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int option, i;
char *out_filename=NULL;
/* argc -> Anzahl Kommandozeilenparameter + Programmnamen (1), somit ist der Wert min. 1 */
/* argv -> ist ein Zeiger auf das Feld (Array) mit der in argc angegebene Anzahl von Elementen...
... und die Elemente (z.B.: argc[0] sind Zeiger auf eine Zeichenkette...
arg[0] -> Programmname
arg[1] -> 1. Parameter
arg[2] -> 2. Parameter
[...]
arg[n] -> letzter Parameter
0L -> das letzte Element von argv[] einthaelt eine Null
*/
/*
getopt() sortiert zunaechst das Feld argc[]
1. Optionen
2. Argumente
Rueckgabewert: erste in der Kommandozeile angegebene Option oder -1 wenn keine Option angegeben wurde...
... beim naechen Durchlauf jeweills die naechste angegebene Option...
... und zum Schluss -1
x: -> 'x' waehre hier eine Option
x:: -> 'x' waehre hier eine optinale Option
xy: -> 'x' und 'y' waehren hier die Optionen (Optionsliste)
*/
while((option = getopt(argc, argv, "ho:")) >= 0) {
switch(option) {
case 'h':
printf("Usage: %s [-o output-file] [input-file ...]\n", argv[0]);
return(0);
case 'o':
out_filename = optarg;
break;
/* wenn ein unzulaessige Option angegeben wurde, gibt getopt() ein '?' aus */
case '?':
return(1); /* unbekannte Option ... Abbruch */
}
/* die globale Variable 'optind' gibt den Index des ersten Arguments dem Feld argv[] weiter */
for (i=optind; i<argc; i++) {
printf("'%s'\n", argv[i]);
}
if (out_filename) {
printf("output is '%s'\n", out_filename);
}
}
return(0);
}
/*
Ausgabe:
./read_args -o test1 1 2 3 4 5
'1'
'2'
'3'
'4'
'5'
output is 'test1'
*/