Přebírání parametrů z příkazového řádku v jazyce C: Porovnání verzí
(Založení stránky) |
m (+kat) |
||
(Nejsou zobrazeny 2 mezilehlé verze od stejného uživatele.) | |||
Řádka 44: | Řádka 44: | ||
Parametr přepínače je přístupný pomocí ukazatele ''optarg'' | Parametr přepínače je přístupný pomocí ukazatele ''optarg'' | ||
− | + | <source lang="c"> | |
− | + | #include <stdio.h> | |
− | + | #include <unistd.h> | |
− | + | ||
− | + | int main (int argc, char **argv) | |
− | + | { | |
− | + | int c; | |
− | + | while ((c = getopt(argc, argv, "ab:")) != -1) { | |
− | + | switch (c) { | |
− | + | case 'a': | |
− | + | printf("Na radku byla volba: a\n"); | |
− | + | break; | |
− | + | case 'b': | |
− | + | printf("Na radku byla volba: b, s parametrem: %s\n", optarg); | |
− | + | break; | |
− | + | case '?': | |
− | + | printf("Neznama volba: %c\n", optopt); | |
− | + | return 1; | |
− | + | default: | |
− | + | abort(); | |
− | + | } | |
− | + | } | |
− | + | return 0; | |
+ | } | ||
+ | </source> | ||
Pro zpracování přepínačů, které mohou být i v dlouhé podobě (například u příkazu <CODE>ls</CODE> by to bylo možné použít <CODE>--long</CODE> místo <CODE>-l</CODE>) je potřeba použít funkci <CODE>getopt_long()</CODE>. | Pro zpracování přepínačů, které mohou být i v dlouhé podobě (například u příkazu <CODE>ls</CODE> by to bylo možné použít <CODE>--long</CODE> místo <CODE>-l</CODE>) je potřeba použít funkci <CODE>getopt_long()</CODE>. | ||
+ | |||
+ | == Cvičení == | ||
+ | |||
+ | ;Příklad 1: Napište program, který zpracovává krátké i dlouhé volby. | ||
+ | |||
+ | [[Kategorie:Jazyk C v Linuxu]] |
Aktuální verze z 6. 4. 2009, 20:39
Při spouštění programů na příkazovém řádku můžeme jejich chování změnit pomocí přepínačů a určit, se kterými soubory budou pracovat pomocí parametrů.
Ukázka chování přepínačů
Například program ls
mění své chování při zadání přepínačů -a
a -l
. V příkladu je tučně vyznačen vstup od uživatele. Všimněte si, že přepínače lze seskupovat:
[huzva@pluto ~]$ ls soubor1.txt soubor2.txt soubor3 [huzva@pluto ~]$ ls -a . .. .skryty-soubor1 .skryty-soubor2.txt soubor1.txt soubor2.txt soubor3 $ ls -l celkem 24 -rw-rw-r-- 1 ke ke 6 úno 22 17:52 soubor1.txt -rw-rw-r-- 1 ke ke 21 úno 22 17:53 soubor2.txt -rw-rw-r-- 1 ke ke 781 úno 22 17:53 soubor3 [huzva@pluto ~]$ ls -l -a celkem 56 drwxrwxr-x 2 ke ke 4096 úno 22 17:53 . drwx--x---+ 46 ke ke 4096 úno 22 17:53 .. -rw-rw-r-- 1 ke ke 336 úno 22 17:53 .skryty-soubor1 -rw-rw-r-- 1 ke ke 12 úno 22 17:53 .skryty-soubor2.txt -rw-rw-r-- 1 ke ke 6 úno 22 17:52 soubor1.txt -rw-rw-r-- 1 ke ke 21 úno 22 17:53 soubor2.txt -rw-rw-r-- 1 ke ke 781 úno 22 17:53 soubor3 [huzva@pluto ~]$ ls -la celkem 56 drwxrwxr-x 2 ke ke 4096 úno 22 17:53 . drwx--x---+ 46 ke ke 4096 úno 22 17:53 .. -rw-rw-r-- 1 ke ke 336 úno 22 17:53 .skryty-soubor1 -rw-rw-r-- 1 ke ke 12 úno 22 17:53 .skryty-soubor2.txt -rw-rw-r-- 1 ke ke 6 úno 22 17:52 soubor1.txt -rw-rw-r-- 1 ke ke 21 úno 22 17:53 soubor2.txt -rw-rw-r-- 1 ke ke 781 úno 22 17:53 soubor3
Příklad užití funkce getopt()
Níže uvedený příklad používá funkci getopt()
ke zpracování přepínačů. Krátké (jednopísmenné) přepínače se mohou seskupovat, mít parametry a nebo být promíchány s vlastními parametry. Proto je pro jejich zpracování knihovní funkce vhodnější.
Pomocí prvních dvou parametrů přebírá funkce getopt počet parametrů a ukazatel na pole s řetězci tvořícími příkazový řádek. Třetím parametrem je definice přepínačů:
- pokud je za písmenem přepínače dvojtečka, musí mít přepínač ještě parametr
- při dvou dvojtečkách je parametr u přepínače volitelný
Parametr přepínače je přístupný pomocí ukazatele optarg
#include <stdio.h>
#include <unistd.h>
int main (int argc, char **argv)
{
int c;
while ((c = getopt(argc, argv, "ab:")) != -1) {
switch (c) {
case 'a':
printf("Na radku byla volba: a\n");
break;
case 'b':
printf("Na radku byla volba: b, s parametrem: %s\n", optarg);
break;
case '?':
printf("Neznama volba: %c\n", optopt);
return 1;
default:
abort();
}
}
return 0;
}
Pro zpracování přepínačů, které mohou být i v dlouhé podobě (například u příkazu ls
by to bylo možné použít --long
místo -l
) je potřeba použít funkci getopt_long()
.
Cvičení
- Příklad 1
- Napište program, který zpracovává krátké i dlouhé volby.