Программирование для Linux. Профессиональный подход - [8]
В Linux множество деталей функционирования системных вызовов отражено в файлах заголовков расположенных в каталогах >/usr/include/bits
, >/usr/include/asm
и >/usr/include/linux
. В частности, номера сигналов (механизм сигналов рассматривается в разделе 3.3, "Сигналы") определены в файле >/usr/include/bits/signum.h
.
1.5.4. Исходные тексты
Linux — система с открытым кодом, не так ли? Верховным судьей, определяющим, как работает система, является исходный код самой системы. К нашему счастью, он доступен бесплатно. В имеющийся дистрибутив Linux могут входить исходные тексты всей системы и всех установленных в ней программ. (Правда, они не всегда записываются на жесткий диск. Инструкции по инсталляции исходных текстов содержатся в документации дистрибутива.) Если это не так, у вас есть право запросить их на основании общей открытой GNU-лицензии.
Исходный код ядра Linux обычно хранится в каталоге >/usr/src/linux
. Это хороший источник информации о том, как работают процессы, виртуальная память и системные устройства. Большинство системных функций, упоминаемых в книге, реализовано в GNU- библиотеке языка С. Местоположение ее исходных текстов можно узнать в документации к дистрибутиву.
Глава 2
Написание качественных программ для среды GNU/Linux
В этой главе описываются базовые методики, применяемые большинством Linux-программистов. Придерживаясь данных методик, читатели смогут писать программы, которые не только хорошо работают а среде GNU/Linux, но и соответствуют представлениям пользователей о том, как должны работать такие программы.
2.1. Взаимодействие со средой выполнения
Те, кто изучали языки С и C++, знают, что специальная функция main() является главной точкой входа в программу. Когда операционная система запускает программу на выполнение, она автоматически предоставляет определенные средства, позволяющие программе взаимодействовать как с самой системой, так и с пользователем. Читатели наверняка знают о том, что у функции >main()
есть два параметра, >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-программы подчиняются соглашениям об интерпретации аргументов командной строки. Аргументы подразделяются на две категории: опции (или флаги) и все остальные. Опции меняют поведение программы, а остальные аргументы содержат разного рода входные данные (например, названия входных файлов).
Опции бывают двух видов.
■ Короткие опции состоят из дефиса и одиночного символа (обычно это буква в нижнем или верхнем регистре). Такие опции быстрее и проще набирать.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.