Deo zbornika Uvod u programiranje kroz C

Argumenti komandne linije u jeziku C

U sistemskim okruženjima kao što su DOS i Unix, programu se mogu predati određeni parametri, tzv. argumenti komandne linije, tako da se navedu na komandnoj liniji iza imena programa, odvojeni razmacima. Na primjer, program cp u operacijskom sustavu Unix, koji vrši kopiranje datoteka, poziva se sa dva parametra:

cp ime1 ime2

gdje je ime1 ime datoteke koju želimo kopirati, a ime2 ime datoteke na koju ime1 želimo kopirati. Programi pisani u C-u također mogu primiti argumente komandne linije. Tu funkcionalnost osigurava funkcija main().

Funkcija main() prihvaća dva argumenta: argc tipa int i niz pokazivača na char, obično nazvan argv. Nova forma funkcije main() glasi:

int main(int argc, char *argv[])
{ 
    .... 
}

Mehanizam je sljedeći: operacijski sustav u varijablu argc smješta broj argumenta komandne linije, koji su uneti pri startanju programa, uvećan za jedan. U argv se nalaze pokazivači na argumente komandne linije, spremljeni u argv[0] do argv[argc-1]. Pri tome argv[0] uvijek sadrži ime programa koji se izvršava (pokazivač na string). Ostali parametri su smješteni redom kojim su upisani na komandnoj liniji. Ako nema argumenata komandne linije, onda je argc == 1. Konačno, argv[argc] mora biti nul-pokazivač.

Na primjer, program args koji samo ispisuje argumente komandne linije izgledao bi ovako:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i;
    for(i=0;i<argc; i++)
        printf("%s%s", argv[i],(i<argc-1) ? "," : ".");
    printf("\n");
    return 0;
}

Pozovemo li program args narebom:

args ovo su neki parametri

on će ispisati

args,ovo,su,neki,parametri.

Operacijski sustav Unix, odnosno shell koji se koristi, ekspandirat će specijalne znakove ?, * i [] prije nego što ih preda pozivnom programu. Više detalja može se naći priručniku za dani shell (sh, ksh, csh ili bash).

Izvor: M. Jurak, Programski jezik C, predavanja 2003/04.