Kris Jamsa Wygraj Z C++ lekcja35


Lekcja 36LEKCJA 36
Używanie argumentów linii poleceń
Jak wiesz, przy wpisywaniu poleceń za znakiem zgłoszenia (promptem) systemu
operacyjnego możesz podawać w linii poleceń dodatkowe informacje, takie jak
nazwa pliku. Na przykład, gdy wywołujesz polecenie COPY systemu operacyjnego
MS-DOS w celu skopiowania zawartości jednego pliku do drugiego, to podajesz
nazwy obu plików w linii poleceń. Analogicznie, jeśli korzystasz z kompilatora
wywoływanego z linii poleceń, to musisz mu podać nazwę pliku źródłowego
programu. Podczas tej lekcji przedstawimy, w jaki sposób programy używają
argumentów linii poleceń. Pod koniec tej lekcji będziesz rozumiał następujące
zagadnienia podstawowe:
Programy w C++ traktują argumenty linii poleceń tak jak parametry funkcji
main.
C++ przekazuje funkcji main dwa (niekiedy trzy) parametry oznaczane w
większości programów jako argc i argv.
Parametr argc zawiera liczbę argumentów linii poleceń przekazanych programowi.

Parametr argv jest tablicą wskaźników do tekstów, z których każdy zawiera
argument linii poleceń.
Niektóre kompilatory dają możliwość korzystania z trzeciego parametru funkcji
main oznaczanego jako env, który jest tablicą wskaźników do tekstów
zawierających ustawienia środowiska.
Możliwość dostępu w programach do argumentów linii poleceń poszerza ilość
zastosowań jednego programu. Na przykład możesz utworzyć własny program
kopiujący, przy użyciu którego będziesz kopiować plik źródłowy podany jako
pierwszy argument linii poleceń na plik docelowy będący drugim argumentem linii
poleceń.


Dostęp do argv i argc
Gdy wywołujesz program za znakiem zgłoszenia (promptem) systemu operacyjnego, to
co wpisujesz tworzy linię poleceń:
C:\> COPY PLIKZR.DOC PLICEL.DOC

W tym przykładzie linia poleceń określa polecenie (COPY) i dwa argumenty (nazwy
plików PLIKZR.DOC i PLICEL.DOC). Aby dać twoim programom dostęp do linii
poleceń, C++ przekazuje main dwa parametry:
void main (int argc, char *argv[])

Pierwszy argument argc zawiera liczbę elementów w tablicy argv. Dla powyższego
polecenia COPY parametr argc powinien mieć wartość 3 (nazwa polecenia i dwa
argumenty). Przedstawiony poniżej program PISZARGC.CPP przy użyciu parametru
argc wyświetla liczbę argumentów linii poleceń:
#include

void main(int argc, char *argv[])
{
cout << "Liczba argumentów linii poleceń wynosi " << argc << endl
}

Przetestuj ten program wywołując go dla różnych liczb parametrów, tak jak tutaj:
C:\> PISZARGC A B C
Liczba argumentów linii poleceń wynosi 4

Niektóre kompilatory traktują argumenty ujęte w cudzysłowy jako jeden argument:
C:\> PISZARGC "To jest jeden argument"
Liczba argumentów linii poleceń wynosi 2

Drugi argument funkcji main to argv, które jest tablicą wskaźników do tekstów
zawierających pojedyncze elementy linii poleceń. Na przykład rysunek 11
przedstawia, w jaki sposób elementy tablicy argv wskazują pozycje linii poleceń.
Przedstawiony poniżej program PISZARGV.CPP przy użyciu instrukcji for wyświetla
elementy tablicy argv (linię poleceń programu). Program zaczyna od pierwszego
elementu tablicy (nazwy programu), a następnie wyświetla kolejne jej elementy aż
do chwili, gdy zmienna sterująca pętli osiągnie wartość argc:
#include

void main(int argc, char *argv[])
{
int i;

for (i = 0; i < argc; i++)
cout << "arg[" << i << "] zawiera " << argv[i] << endl;
}

Rysunek 11.
Elementy tablicy argv wskazują argumenty linii poleceń





Skompiluj i wywołaj ten program podając jako linię poleceń np.:
C:\> PISZARGV A B C
argv[0] zawiera PISZARGV.EXE
argv[1] zawiera A
argv[2] zawiera B
argv[3] zawiera C

Dostęp do argumentów linii poleceń
Możesz rozszerzyć kategorię zadań, jakie twój program może wykonywać, dzięki
argumentom linii poleceń, które są dostępne przy użyciu dwóch parametrów, które
C++ przekazuje funkcji main. Pierwszym parametrem jest argc, które zawiera
liczbę argumentów linii poleceń (wliczając w to nazwę programu). Drugi parametr
argv jest tablicą wskaźników do tekstów. Każdy z tych tekstów odpowiada jednemu
argumentowi linii poleceń. Aby mieć dostęp do argumentów linii poleceń, należy w
następujący sposób zmienić nagłówek funkcji main:
void main (int argc, char *argv[])


Powtarzanie instrukcji w pętli aż argv osiągnie NULL
Jak już wiesz, w programach w języku C++ na końcu tekstów jest umieszczony znak
NULL. W analogiczny sposób C++ przy użyciu znaku NULL wskazuje ostatni element
tablicy argv. Przedstawiony poniżej program ARGVNULL.CPP jest modyfikacją
poprzedniego programu, w której elementy tablicy argv są analizowane w pętli do
chwili, gdy bieżący element tablicy będzie równy NULL:
#include

void main(int argc, char *argv[])
{
int i;

for (i = 0; argv[i] != NULL; i++)
cout << "arg[" << i << "] zawiera " << argv[i] << endl;
}



Potraktujmy argv jako wskaźnik
Jak już wiesz, w C++ masz dostęp do tablic przy użyciu wskaźnika. Przedstawiony
poniżej program WSKARGV.CPP wyświetla zawartość linii poleceń traktując argv
jako wskaźnik do wskaźnika do tekstu:
#include

void main(int argc, char **argv)
{
int i;

while (*argv)
cout << "arg[" << i << "] zawiera " << *argv[i]++ << endl;
}

Zastanów się przez chwilę nad deklaracją parametru argv funkcji main:
void main(int argc, char **argv)

Pierwsza gwiazdka w tej deklaracji informuje kompilator C++, że argv jest
wskaźnikiem. Druga gwiazdka mówi kompilatorowi, że argv jest wskaźnikiem do
wskaźnika, w tym przykładzie wskaźnikiem do wskaźnika typu char. Potraktuj argv
jako tablicę wskaźników. Każdy z jej elementów wskazuje w tym przypadku na
tablicę typu char.


Korzystanie z argumentów linii poleceń
Przedstawiony poniżej program PISZPLIK.CPP przy użyciu argumentów linii poleceń
wyświetla na ekranie zawartość podanego pliku. Na przykład możesz przy pomocy
tego programu wyświetlić zawartość pliku AUTOEXEC.BAT katalogu głównego wpisując
następującą linię poleceń:
C:\> PISZPLIK \AUTOEXEC.BAT

Oto instrukcje programu PISZPLIK.CPP. Na początku sprawdzany jest parametr argc,
aby ustalić, czy użytkownik podał w linii poleceń nazwę pliku. Jeśli podano
nazwę pliku, to parametr argc będzie zawierać wartość 2. Następnie jest
otwierany i wyświetlany plik przy użyciu technik, które poznałeś podczas lekcji
34. Jak widać, gdy program nie może otworzyć podanego pliku, to wyświetla
komunikat o błędzie i kończy swoje działanie:
#include
#include
#include

void main(int argc, char *argv[])
{
char linia[256];

if (argc < 2)
{
cerr << "Musisz podać nazwę pliku" << endl;
exit (1);
}

ifstream plik_wejsc(argv[1]);

if (plik_wejsc.fail())
cerr << "Błąd przy otwarciu pliku " << argv[1] << endl;
else
{
while ((! plik_wejsc.eof()) && (! plik_wejsc.fail()))
{
plik_wejsc.getline (linia, sizeof(linia));

if (! plik_wejsc.eof())
cout << linia << endl;
}
}
}



Dostęp do parametrów środowiska systemu operacyjnego
Jak wiesz, większość systemów operacyjnych pozwala definiować parametry
środowiska, przy użyciu których programy mogą sprawdzać różne ustawienia, takie
jak ścieżka. Jeśli na przykład pracujesz w środowisku MS-DOS, to możesz ustawiać
lub wyświetlać parametry środowiska przy użyciu polecenia SET. W zależności od
typu kompilatora możesz mieć w swoich programach dostęp do ustawień środowiska
przy użyciu trzeciego parametru funkcji main noszącego nazwę env. Tak jak
parametr argv, env jest wskaźnikiem do tablicy wskaźników do tekstów. Również
podobnie jak dla argv, ta tablica jest zakończona znakiem NULL. Jeśli twój
kompilator akceptuje parametr env funkcji main, to możesz w następujący sposób
zmienić nagłówek main:
void main(int argc, char *argv[], char *env[])

Przedstawiony poniżej program PISZENV.CPP przechodzi w Pętli elementy tablicy
env i wyświetla ustawienia środowiska programu:
#include

void main(int argc, char *argv[], char *env[])
{
while (*env)
cout << *env++ << endl;
}

Jak widzimy, program po prostu przechodzi w pętli elementy tablicy env aż do
napotkania wskaźnika do NULL, który oznacza ostatnią pozycję w tablicy. Gdy
skompilujesz i uruchomisz ten program, to otrzymasz na ekranie ustawienia
środowiska:
C:\> PISZENV
PROMPT=$P$G
COMSPEC=C:\WINDOWS\COMMAND.COM
PATH=C:\BORLANDC\BIN;C:\DOS;C:\WINDOWS;
TEMP=C:\DOS
windir=C:\WINDOWS

Dostęp do ustawienia parametrów środowiska
Przy niektórych kompilatorach C++ programy mogą mieć dostęp do ustawienia
parametrów środowiska przy użyciu trzeciego parametru linii poleceń env.
Podobnie jak parametr argv, env jest tablicą wskaźników do tekstów, z których
każdy odpowiada jednej pozycji ustawień środowiska. Aby mieć dostęp do ustawień
środowiska przy użyciu parametru env, zmień w następujący sposób nagłówek
funkcji main:
void main(int argc, char *argv[], char *env[])


Zapamiętaj
Aby zwiększyć kategorię aplikacji, które może obsługiwać twój program, C++
pozwala korzystać z argumentów linii poleceń. Podczas lekcji 37 dowiesz się, w
jaki sposób przy użyciu makr i stałych możesz uprościć sobie programowanie i
tworzyć bardziej czytelny kod. Zanim jednak przejdziemy do lekcji 37 upewnij
się, że opanowałeś już następujące zagadnienia podstawowe:
Gdy wywołujesz program za znakiem zgłoszenia (promptem) systemu operacyjnego,
to wprowadzane przez Ciebie informacje tworzą linię poleceń programu.
Twoje programy mają dostęp do linii poleceń poprzez dwa parametry argv i argc
funkcji main.
Parametr argc zawiera liczbę argumentów linii poleceń.
Parametr argv jest tablicą wskaźników do tekstów, z których każdy zawiera
argument linii poleceń.
Niektóre kompilatory dają możliwość korzystania z trzeciego parametru funkcji
main oznaczanego jako env, który jest tablicą wskaźników do tekstów
zawierających ustawienia środowiska.



WsteczSpis treściDalej



Wyszukiwarka

Podobne podstrony:
Kris Jamsa Wygraj Z C lekcja32
Kris Jamsa Wygraj Z C lekcja 5
Kris Jamsa Wygraj Z C lekcja23
Kris Jamsa Wygraj Z C lekcja38
Kris Jamsa Wygraj Z C lekcja20
Kris Jamsa Wygraj Z C lekcja27
Kris Jamsa Wygraj Z C lekcja34
Kris Jamsa Wygraj Z C lekcja18
Kris Jamsa Wygraj Z C lekcja17
Kris Jamsa Wygraj Z C lekcja25
Kris Jamsa Wygraj Z C lekcja14
Kris Jamsa Wygraj Z C lekcja36
Kris Jamsa Wygraj Z C lekcja 4
Kris Jamsa Wygraj Z C lekcja33
Kris Jamsa Wygraj Z C lekcja 7
Kris Jamsa Wygraj Z C lekcja30
Kris Jamsa Wygraj Z C lekcja12
Kris Jamsa Wygraj Z C lekcja28
Kris Jamsa Wygraj Z C lekcja 6

więcej podobnych podstron