Операционная система UNIX. Руководство программиста




Как аргументы передаются в программу


Информация или управляющие параметры могут передаваться в программу как аргументы командной строки при запуске программы. При этом указанные в командной строке аргументы передаются функции main() через два ее параметра, первый из которых содержит количество аргументов, а второй является массивом указателей на цепочки символов, содержащие передаваемую в качестве аргументов информацию (выполнение любой C-программы начинается с функции с именем main). Заметим, что поскольку количество аргументов программы передается ей во время запуска, программа не обязана знать заранее, сколько аргументов следует ожидать.

Обычно параметры функции main() имеют имена argc и argv, хотя это и не обязательно. argc - целое число, равное количеству передаваемых аргументов. Это число всегда больше или равно 1, поскольку сама команда считается первым аргументом, и argv[0]

является указателем на цепочку символов, представляющую команду. Остальные элементы массива argv - это указатели на цепочки символов содержащие аргументы. Все упомянутые цепочки символов оканчиваются нулевым байтом.

Если во время запуска программы ей будут передаваться аргументы, следует в тексте программы предусмотреть их обработку. Передаваемая информация может, например, содержать:

  • Управляющие параметры. В этом случае передаваемая информация используется для установки внутренних флагов программы с целью управления ходом выполнения.
  • Переменное имя файла.

Приведем примеры фрагментов программ, иллюстрирующих эти два способа использования аргументов программы.

#include <stdio.h> #define FALSE 0 #define TRUE 1

main (argc, argv) int argc; char *argv []; { void exit (); int oflag = FALSE; int pflag = FALSE; /* Функциональные флаги */ int rflag = FALSE; int ch;

while ((ch = getopt (argc, argv, "opr")) != EOF) { /* Если имеются опции, присвоить флагам TRUE. Если опций нет, вывести сообщение об ошибке */ switch (ch) { case 'o': oflag = TRUE; break; case 'p': pflag = TRUE; break; case 'r': rflag = TRUE; break; default: (void) fprintf (stderr, "Использование: %s [-opr]\n", argv [0]); exit (2); } } . . . }




Содержание  Назад  Вперед