Программирование для Linux. Профессиональный подход - страница 10
есть два параметра, >argc
и >argv
, через которые в программу передаются входные данные. Имеются также стандартные потоки >stdout
и >stdin
(или >cout
и >cin
в C++), реализующие консольный ввод-вывод. Все эти элементы существуют в языках С и C++, и работа с ними в среде GNU/Linux происходит строго определенным образом.
2.1.1. Список аргументов
Для запуска программы достаточно ввести ее имя в командной строке. Дополнительные информационные элементы, передаваемые программе, также задаются в командной строке и отделяются от имени программы и друг от друга пробелами. Такие элементы называются аргументами командной строки. (Аргумент, содержащий пробел, должен заключаться в кавычки.) Вообще-то, если быть более точным, правильнее говорить о списке аргументов, поскольку они не обязательно поступают из командной строки. В главе 3, "Процессы", рассказывается об ином способе вызова программы, при котором другая программа может передавать ей список аргументов напрямую.
Когда программа запускается из командной строки, список аргументов охватывает все содержимое строки, включая имя программы и любые присутствующие аргументы. Допустим, вызывается программа >ls
, отображающая содержимое корневого каталога и размеры соответствующих файлов:
>% ls -s /
В данном случае список аргументов программы ls состоит из трех элементов. Первый — это имя самой программы, указанное в командной строке, а именно >ls
. Второй и третий элементы — аргументы командной строки >-s
и >/
.
Функция >main()
получает доступ к списку аргументов благодаря своим параметрам >argc
и >argv
(если они не используются, их можно не указывать). Параметр >argc
— это целое число, равное количеству элементов в списке. Параметр >argv
— это массив символьных указателей. Размер массива равен >argc
, а каждый элемент массива указывает на соответствующий элемент списка. Все аргументы представляются в виде строк, оканчивающихся нулевым символом.
Работа с аргументами командной строки сводится к просмотру параметров >argc
и >argv
. Если имя программы не должно учитываться, не забудьте пропустить первый элемент списка.
Использование параметров >argc
и >argv
демонстрируется в листинге 2.1.
>argc
и >argv
>#include
>int main (int argc, char* argv[]) {
> printf("The name of this program is "%s*.\n", argv[0]);
> printf("This program was invoked with %d arguments.\n", argc - 1);
> /* Имеется ли хоть один аргумент? */
> if (argc > 1) {
> /* Да; отображаем содержимое. */
> int i;
> printf("The arguments are:\n");
> for (i = 1; i < argc; ++i)
> printf(" %s\n", argv[i]);
> }
> return 0;
>}
2.1.2. Соглашения по работе с командной строкой в GNU/Linux
Практически все Linux-программы подчиняются соглашениям об интерпретации аргументов командной строки. Аргументы подразделяются на две категории: опции (или флаги) и все остальные. Опции меняют поведение программы, а остальные аргументы содержат разного рода входные данные (например, названия входных файлов).
Опции бывают двух видов.
■ Короткие опции состоят из дефиса и одиночного символа (обычно это буква в нижнем или верхнем регистре). Такие опции быстрее и проще набирать.
■ Длинные опции состоят из двух дефисов, после которых следует имя. содержащее буквы нижнего и верхнего регистров и дефисы. Такие опции легче запоминать и читать (например, в командных сценариях).
Обычно программа поддерживает обе разновидности каждой опции: первую — для краткости, вторую — для ясности. Например, большинство программ понимает опции >-h
и >--help
и трактует их одинаково. Как правило, опции указываются сразу после имени программы. После опций могут идти другие аргументы, в частности имена входных файлов и входные данные.
Некоторые опции предполагают наличие собственных аргументов. Так, рассмотренная выше команда >ls -s /
выводит содержимое корневого каталога. Опция -s сообщает программе >ls
о необходимости отображения размера (в килобайтах) каждого элемента каталога. Аргумент >/
задает имя каталога. Опция >--size
является синонимом опции >-s
, поэтому та же самая команда может быть задана так: