В этой главе описываются базовые методики, применяемые большинством Linux-программистов. Придерживаясь данных методик, читатели смогут писать программы, которые не только хорошо работают а среде GNU/Linux, но и соответствуют представлениям пользователей о том, как должны работать такие программы.
2.1. Взаимодействие со средой выполнения
Те, кто изучали языки С и C++, знают, что специальная функция main() является главной точкой входа в программу. Когда операционная система запускает программу на выполнение, она автоматически предоставляет определенные средства, позволяющие программе взаимодействовать как с самой системой, так и с пользователем. Читатели наверняка знают о том, что у функции main()
есть два параметра, argc
и argv
, через которые в программу передаются входные данные. Имеются также стандартные потоки stdout
и stdin
(или cout
и cin
в C++), реализующие консольный ввод-вывод. Все эти элементы существуют в языках С и C++, и работа с ними в среде GNU/Linux происходит строго определенным образом.
2.1.1. Список аргументов
Для запуска программы достаточно ввести ее имя в командной строке. Дополнительные информационные элементы, передаваемые программе, также задаются в командной строке и отделяются от имени программы и друг от друга пробелами. Такие элементы называются
Когда программа запускается из командной строки, список аргументов охватывает все содержимое строки, включая имя программы и любые присутствующие аргументы. Допустим, вызывается программа 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
и трактует их одинаково. Как правило, опции указываются сразу после имени программы. После опций могут идти другие аргументы, в частности имена входных файлов и входные данные.