Язык Си - руководство для начинающих
Шрифт:
РИС. 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, но еще не можете понять, как она работает. Может быть, это объяснение поможет вам (мы надеемся).
Компиляторы Си предполагают наличие у 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
Очень часто аргументы командных строк используются для указания возможностей программы. Например, можно применять комбинацию символов - 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.