Книга: Linux программирование в примерах
2.3.3.4. GNU getopt() или getopt_long() в программах пользователей
2.3.3.4. GNU getopt()
или getopt_long()
в программах пользователей
Вы можете захотеть использовать в своих программах GNU getopt()
или getopt_long()
и заставить их работать на не-Linux системах/ Это нормально; просто скопируйте исходные файлы из программы GNU или из CVS архива библиотеки С GNU (GLIBC)[30]. Исходные файлы getopt.h
, getopt.с
и getopt1.c
. Они лицензированы на условиях меньшей общедоступной лицензии (Lesser General Public License) GNU, которая позволяет включать библиотечные функции даже в патентованные программы. Вы должны включить в свою программу копию файла COPYING.LIB
наряду с файлами getopt.h
, getopt.с
и getopt1.с
.
Включите исходные файлы в свой дистрибутив и откомпилируйте их с другими исходными файлами. В исходном коде, вызывающем getopt_long()
, используйте '#include <getopt.h>
', а не '#include "getopt.h"
'. Затем, при компилировании, добавьте к командной строке компилятора С -I
. Таким способом сначала будет найдена локальная копия заголовочного файла.
Вы можете поинтересоваться: «Вот так, я уже использую GNU/Linux. Почему я должен включать getopt_long()
в свой исполняемый модуль, увеличивая его размер, если процедура уже находится в библиотеке С?» Это хороший вопрос. Однако, здесь не о чем беспокоиться. Исходный код построен так, что если он компилируется на системе, которая использует GLIBC, откомпилированные файлы не будут содержать никакого кода! Вот подтверждение на нашей системе:
$ uname -а /* Показать имя и тип системы */
Linux example 2.4.18-14 #1 Wed Sep 4 13:35:50 EDT 2002 i686 i686 i386 GNU/Linux
$ ls -l getopt.о getopt1.о /* Показать размеры файлов */
-rw-r--r-- 1 arnold devel 9836 Mar 24 13:55 getopt.о
-rw-r--r-- 1 arnold devel 10324 Mar 24 13:55 getopt1.о
$ size getopt.о getopt1.о /* Показать включенные в исполняемый
модуль размеры */
text data bss dec hex filename
0 0 0 0 0 getopt.о
0 0 0 0 0 getopt1.о
Команда size
печатает размеры различных составных частей двоичного объекта или исполняемого файла. Мы объясним вывод в разделе 3.1 «Адресное пространство Linux/Unix». Что важно понять прямо сейчас, это то, что несмотря на ненулевой размер самих файлов, они не вносят никакого вклада в конечный исполняемый модуль. (Думаем, это достаточно ясно.)
- Appendix I. GNU General Public License
- 2.1.3. Функция getopt_long()
- Организация пользователей в группы с помощью ролей
- Настройка учетных записей пользователей
- Новое имя базы данных пользователей
- Глава 28 Идентификация и аутентификация пользователей
- Appendix H. GNU Free Documentation License
- Неквалифицированные действия пользователей
- Настройка доступа пользователей к рабочей книге
- Информация для пользователей Windows ХР
- 3 Учетные записи пользователей
- Favicon – делаем сайт более заметным для пользователей