2.1.1. Список аргументов

2.1.1. Список аргументов

Для запуска программы достаточно ввести ее имя в командной строке. Дополнительные информационные элементы, передаваемые программе, также задаются в командной строке и отделяются от имени программы и друг от друга пробелами. Такие элементы называются аргументами командной строки. (Аргумент, содержащий пробел, должен заключаться в кавычки.) Вообще-то, если быть более точным, правильнее говорить о списке аргументов, поскольку они не обязательно поступают из командной строки. В главе 3, "Процессы", рассказывается об ином способе вызова программы, при котором другая программа может передавать ей список аргументов напрямую.

Когда программа запускается из командной строки, список аргументов охватывает все содержимое строки, включая имя программы и любые присутствующие аргументы. Допустим, вызывается программа ls, отображающая содержимое корневого каталога и размеры соответствующих файлов:

% ls -s /

В данном случае список аргументов программы ls состоит из трех элементов. Первый — это имя самой программы, указанное в командной строке, а именно ls. Второй и третий элементы — аргументы командной строки -s и /.

Функция main() получает доступ к списку аргументов благодаря своим параметрам argc и argv (если они не используются, их можно не указывать). Параметр argc — это целое число, равное количеству элементов в списке. Параметр argv — это массив символьных указателей. Размер массива равен argc, а каждый элемент массива указывает на соответствующий элемент списка. Все аргументы представляются в виде строк, оканчивающихся нулевым символом.

Работа с аргументами командной строки сводится к просмотру параметров argc и argv. Если имя программы не должно учитываться, не забудьте пропустить первый элемент списка.

Использование параметров argc и argv демонстрируется в листинге 2.1.

Листинг 2.1. (arglist.c) Использование параметров argc и argv

#include <stdio.h>

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

 printf("The name of this program is "%s*. ", argv[0]);

 printf("This program was invoked with %d arguments. ", argc - 1);

 /* Имеется ли хоть один аргумент? */

 if (argc > 1) {

  /* Да; отображаем содержимое. */

  int i;

  printf("The arguments are: ");

  for (i = 1; i < argc; ++i)

   printf(" %s ", argv[i]);

 }

 return 0;

}