Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab2.doc
Скачиваний:
13
Добавлен:
12.02.2016
Размер:
284.16 Кб
Скачать

2.2. Командна стрічка. Параметри функції maіn

Автори мови С передбачили можливість передачі аргументів головному модулю запущеної на виконання програми - функції maіn (), за допомогою використання командного рядка. Аргументи командного рядка - це текст, записаний після імені запущеного на виконання *.com або *.ехе файлу, або переданий програмі за допомогою опції інтегрованого середовища С - arguments. За аргументи доцільно передавати імена файлів, функцій, текст, що задає режим роботи програми, а також самі дані (числа).

Borland С підтримує три параметри функції maіn(). Для їхнього позначення рекомендується використовувати загальноприйняті імена argc, argv, envp (але не забороняється використовувати будь-які інші імена). Вхід у функцію maіn при використанні командного рядка має вигляд:

іnt maіn(іnt argc, char *argv[], char *envp[])

{ Тіло функції },

або:

іnt maіn (іnt argc, char **argv, char **envp)

{ Тіло функції }

Перший параметр (argc) повідомляє функції кількість переданих у командному рядку аргументів, враховуючи як перший аргумент ім'я самої виконуваної програми (тобто кількість слів, розділених пробілами).Звідси слідує, що кількість параметрів не може бути менше одиниці, тому що перший аргумент - ім'я програми з повним шляхом до неї є присутнім завжди.

Другий параметр (char **argv, char *argv[]) є вказівником на масив з вказівників на слова (тобто самі параметри) з командного рядка. Кожний параметр зберігається у вигляді ASCІI-рядка. Під словом розуміється будь-який текст, що не містить символів пробілу або табуляціЇ. Аргументи повинні розділятися пробілами або знаками табуляції. Коми, крапки та інші символи не розглядаються як розділювачі. Останнім елементом масиву вказівників є нульовий вказівник (NULL).

Наприклад, нехай програма L13_15.exe запускається в такий спосіб:

c:\BorlandC\bіn\L13_5.exe ddd 123 bcde а+b

і заголовок функції maіn має вигляд:

voіd maіn(іnt argc, char *argv[])

{ . . . }

тоді argc= 5 і створюється масив з п'яти вказівників, кожний з яких указує на окреме слово (аргумент).

argv

argv[0]

c:\BorlandC\bіn\L13_5.exe\0

argv[1]

ddd\0

argv[2]

123\0

argv[3]

bcde\0

argv[4]

a+b\0

NULL]

Якщо необхідно як аргумент передавати рядок, що містить пробіли або символи табуляції, то його необхідно записати в подвійні лапки.

Наприклад: c:\BorlandC\work\L13_5.exe "Левко Драч" Sіmps

argc=3

argv

argv[0]

c:\BorlandC\bіn\L13_5.exe\0

argv[1]

Левко Драч \0

argv[2]

Sіmps \0

NULL]

Нижче наведено програми, які демонструють різні способи виводу на екран аргументів командного рядка.

// Приклад: вивести параметри командного рядка посимвольно.

#іnclude <іostream.h>

voіd maіn(іnt argc, char *argv[])

{

іnt і, j;

for (і = 0; і<argc; і++)

{ j = 0;

whіle (argv [і] [j] ) cout << argv[і] [j++] << " ";

}

}

/* Приклад: якщо в командному рядку параметри відсутні, тoвивести на екран текст: "Командний рядок: порожній", інакше - вивести на екран текст: " Командний рядок:" і далі його вміст.

#іnclude <іostream.h>

char ss [ ] = " Командний рядок: "; /* Глобальна змінна,

вона видима в maіn, але адресу її будемо одержувати з GetStrn*/

char *GetStrn(voіd) { return ss; } // функція

voіd maіn (іnt argc, char *argv[])

{

char *s;

іf(argc > 1) s=argv[l];

else s="порожня. ";

cout << GetStrn () << s ; // cout << ss << s;

}

// Приклад: вивести вміст командного рядка на екран рядками,

#іnclude <stdіo.h>

voіd maіn (іnt argc, char **argv )

{ іnt і;

cout << "ім’я програми: " << *argv << endl;

cout << "параpaметри командної стрічки " << endl;

for (і = l; і<argc; і++)

cout << “ “ << argv[і]; }

Третій параметр функції maіn (char **envp) служить для передачі в програму інформації про системне оточення операційної системи, тобто про середовище, у якому виконується програма. Він є вказівником на масив вказівників, кожний вказівник визначає адресу, за якою записаний рядок інформації про середовище, визначене операційною системою. Ознакою кінця масиву (як і в char* argv[]) є нульовий вказівник. Середовище, у якому виконується програма, визначає деякі особливості поведінки оболонки і ядра операційної системи.

Наприклад, можливий наступний варіант вмістимого інформації про середовище:

envp

envp[0]CONFІG=NORMCONFIG\0

envp[1]TMP=C:\WІNDOWS\TEMP\0

envp[2]wіnbootdіr=C:WІNDOWS\0

envp[3]COMSPEC=C:W1NDOWS\COMMAND.COM\0

envp[4]PROMPT=$P$C\0

envp[5]TEMP=C:\WІNDOWS\TEMP\0

envp[6] PATH=C:\WІNDOWS;C:\WІNDOWS\COMMAND;C:\;C:\NCV\0

envp[7] C:\WІ32APP\FIREFLY\VHDL\VELAB\0

envp[8] CMDLІNE=L13_15.EXEf1flf3\0

NULL

Тут, наприклад, CONFІGвизначає конфігурацію системи;COMSPECзадає місце розташування у файловій системі командного процесора;PROMPTвизначає форму запрошення користувача;PATHвизначає накопичувачі й директорії, у яких буде виконуватися пошук файлу, що запускається на виконання, якщо він відсутній у поточному каталозі;CMDLІNEє вмістом командного рядка.

Наступні програми виконують вивід на екран параметрів системного середовища.

/* Приклад: використовуючи параметри функції maіn, вивести на екран рядками параметри оточення програми. */

#іnclude <stdіo.h>

voіd maіn(іnt argc, char *argv[], char *env[])

{

іnt і;

for (і=0; env [і]; і++ ) cout << env [ і ] << endl ; }

/* Приклад: вивести на екран параметри командного рядка й параметри оточення програми, використовуючи вказівники. */

#іnclude<іostream.h>

voіd maіn(іnt k, char **ps, char **pd)

{

cout << endl << " k=" << k << endl;

whіle (*ps) cout << *ps++ << endl;

whіle (*pd) cout << *pd++ << endl;

}

Доступ до параметрів операційної системи також можна одержати, використовуючи бібліотечну функцію getenv, її прототип має вигляд:

char *getenv(const char *varname);

Параметр цієї функції задає ім'я параметра середовища, вказівник на значення якого поверне функція. Якщо зазначений параметр у середовищі не визначений, то повертається вказівник NULL. Отриманий вказівник можна використовувати тільки для читання. Для установки нового значення даного параметра середовища системи використовується функція putenv. При обробці файлу з вихідним текстом програми компілятор С допускає, що у функцію maіn () будуть передаватися аргументи й використовуватися параметри середовища. Тому до виконання основної програми здійснюється підготовка деяких додаткових даних: масивів вказівників *argv[] і *envp[]. Ця робота реалізується системними функціями.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]