1.5.2. Система Info
Система Info содержит гораздо более подробную документацию ко многим базовым компонентам GNU/Linux, а также к ряду других программ. Информационные страницы представляют собой гипертекстовые документы, напоминающие Web-страницы. Для запуска текстовой версии справочной системы Info достаточно ввести info
в командной строке. Появится меню с описанием иерархии документов, установленных в системе. Нажав <Ctrl+H>, можно получить список клавиш, посредством которых осуществляется навигация по документам системы Info.
Среди наиболее полезных документов перечислим следующие:
■ gcc
— описание компилятора gcc
;
■ libc
— описание GNU-библиотеки языка С, содержащей множество системных вызовов,
■ gdb
— описание GNU-отладчика;
■ emacs
— описание редактора Emacs;
■ info
— описание самой системы Info.
Можно сразу вызвать нужную страницу, задав ее имя в командной строке:
% info libs
Те, кто в основном работают в Emacs, могут вызвать встроенный модуль просмотра документов Info, набрав M-x info
или C-h i
.
1.5.3. Файлы заголовков
Много информации о системных функциях можно почерпнуть из системных файлов заголовков. Они находятся в каталогах /usr/include
и /usr/include/sys
. Например, если компилятор сообщает об ошибке вызова системной функции, загляните в соответствующий файл заголовков и убедитесь, что реальный прототип функции соответствует описанному на man
-страннце.
В 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, "Процессы", рассказывается об ином способе вызова программы, при котором другая программа может передавать ей список аргументов напрямую.