Книга: Язык Си - руководство для начинающих

АРГУМЕНТЫ КОМАНДНОЙ СТРОКИ

АРГУМЕНТЫ КОМАНДНОЙ СТРОКИ

     Командная строка - это строка, которую вы печатаете на клавиатуре, чтобы запустить вашу программу. Это нетрудно. Предположим, у нас есть программа в файле с именем fuss. В этом случае командная строка выглядела бы так:


РИС. 13.5. Указатели сортируемых строк.

или, может быть,

А > fuss

с использованием двух системных приглашений.

Аргументы командной строки являются дополнительными элементами в той же самой строке:

%fuss - r Ginger

Следует заметить, что программа на языке Си может вводить информацию в эти элементы и применять их для собственных нужд. Этот механизм предназначен для использования аргументов функции main( ). Вот типичный пример:

/* main( ) с аргументами */

main(argc, argv)

int argc;

char *argv[  ];

{

int count;

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

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

printf("n");

}

Поместите эту программу в выполняющий файл, названный echo, и вот что произойдет:

А > echo 

Я мог бы воспользоваться небольшой помощью.

Я мог бы воспользоваться небольшой помощью.

     Вероятно, вы видите, почему функция называется echo, но еще не можете понять, как она работает. Может быть, это объяснение поможет вам (мы надеемся).

     Компиляторы Си предполагают наличие у main( ) двух аргументов. Первый аргумент представляет количество строк, следующих за командным словом. Обычно (но не обязательно) этот аргумент типа int называется argc (argument count). Система использует пробелы, чтобы сообщить о конце одной строки и начале следующей. Так, наш пример с echo имеет шесть строк, а пример с fuss имел две строки. Второй аргумент является массивом указателей строк. Каждой строке, входящей в командную строку, присваивается ее


собственный указатель. По соглашению, этот массив указателей называется argv(argument values). Если можно (некоторые операционные системы не позволяют этого), элементу argv[0] присваивается имя самой программы. В этом случае аргументу argv[l] присваивается первая следующая строка и т. д. Для нашего примера имеем

argv[0] ссылается на echo (для большинства систем)

argv[1] ссылается на я

argv [2] ссылается на мог

argv [6] ссылается на помощью

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


РИС. 13.6. Аргументы командной строки.

Многие программисты используют для argv и другие обозначения:

main(arge, argv)

int arge;

char **argv;

Описание argv на самом деле эквивалентно char *аrgv[ ];. Читая его, вы могли бы сказать, что argv является указателем на указатель на типchar. Наш пример дает то же самое. У нас был массив из семи элементов. Имя массива является указателем на его первый элемент. Поэтому argv ссылается на argv[0], a argv[0] является указателем на тип char. Следовательно, даже с исходным определением argv является указателем на указатель на тип char. Вы можете использовать любую из этих форм, но видно, что первая проще для понимания.

     Очень часто аргументы командных строк используются для указания возможностей программы. Например, можно применять комбинацию символов - r, чтобы заставить программу выполнять сортировку в обратном порядке. Обычно альтернативы задаются при помощи дефиса и буквы, как - r. Эти "флажки" ничего нс означают в языке Си; вы должны сами запрограммировать их распознавание.

Вот очень простой пример, показывающий, как программа может проверять и использовать флажок.

/* обычное начало */

#define YES 1

#define NO  0

main(argc, argv)

int argc;

char *argv[ ];

{

float array[100];

int n;

int flag = NO;

if(argv[l][0] == '-' && argv[l][l] == 'r')

     flag = YES;

...

if flag = NO

     sort1(array, n);

else

sort2(array, n);

...

}

Эта программа проверяет первую строку после имени командного файла, чтобы посмотреть, начинается ли она с дефиса. Затем она проверяет, является ли следующий символ кодом буквы r. Если это так, то устанавливается флажок, приводящий к использованию другой программы сортировки. Строки после первой игнорируются. Как мы уже сказали, этот пример достаточно прост.

     Если вы использовали систему UNIX, то, вероятно, заметили, что команды UNIX предоставляют разнообразные варианты командной строки и ее аргументов. Эти примеры показывают, как использовать аргументы командной строки языка Си, поскольку большая часть системы UNIX написана на языке Си.

Аргументы командных строк могут быть также именами файлов, и вы можете использовать их вместо операторов переключения, чтобы указать программе, над какими файлами надо работать. Мы покажем вам, как это делается, в гл. 15.

Оглавление книги


Генерация: 0.691. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз