■ Последнее правило представляет собой шаблон компиляции совместно используемых файлов серверных модулей.
Обратите внимание на то, что исходные файлы серверных модулей компилируются с флагом -fPIC
, так как они включаются в совместно используемые библиотеки (см. раздел 2.3.2, "Совместно используемые библиотеки").
Исполняемый файл server
компонуется с флагом -Wl,-export-dynamic
. Благодаря этому файл будет экспортировать свои символические константы, что позволит динамически загружаемым модулям ссылаться на функции, находящиеся в файле common.c
.
Построить исполняемый файл несложно. Перейдите в каталог, содержащий исходные файлы, и вызовите команду make
:
% make
cc -Wall -g -с -o server.о server.с
cc -Wall -g -с -o module.о module.с
cc -Wall -g -с -o common.о common.с
cc -Wall -g -с -o main.o main.c
cc -Wall -g -Wl,-export-dynamic -o server server.о module.о
common.о main.o -ldl
cc -Wall -g -fPIC -shared -o diskfree.so diskfree.c
cc -Wall -g -fPIC -shared -o issue.so issue.с
cc -Wall -g -fPIC -shared -o processes.so processes.с
cc -Wall -g -fPIC -shared -o time.so time.с
В результате будут созданы программа server
и совместно используемые библиотеки серверных модулей:
% ls -l server *.so
-rwxr-xr-x 1 samuel samuel 25769 Mar 11 01:15 diskfree.so
-rwxr-xr-x 1 samuel samuel 31184 Mar 11 01:15 issue.so
-rwxr-xr-x 1 samuel samuel 41579 Mar 11 01:15 processes.so
-rwxr-xr-x 1 samuel samuel 71758 Mar 11 01:15 server
-rwxr-xr-x 1 samuel samuel 13980 Mar 11 01:15 time.so
Для запуска сервера достаточно ввести в командной строке имя server
. Если не задать номер порта с помощью опции --port
( -p
). ОС Linux самостоятельно выберет порт. При указании опции --verbose
( -v
) сервер покажет, какой порт ему назначен.
Если не назначить серверу адрес с помощью опции --address
( -а
), сервер будет принимать запросы по всем имеющимся адресам. Для подключенного к сети компьютера это означает, что любой пользователь сети, зная номер порта сервера и имя страницы, сможет обратиться к серверу. Из соображений безопасности рекомендуем указывать адрес localhost
, пока вы не убедитесь в правильной работе сервера. В этом случае сервер будет связан с локальным сетевым устройством (обозначается как lo
) и к нему смогут обращаться только программы, работающие на том же самом компьютере.
% ./server --address localhost --port 4000
Теперь сервер работает. Откройте окно броузера и попытайтесь обратиться к серверу по номеру порта. Запросите страницу, имя которой совпадает с именем модуля. Вот как, например, вызывается модуль diskfree.so
:
http://localhost:4000/diskfree
Вместо 4000 можно указать любой другой номер порта, который был выбран. Чтобы завершить работу сервера, нажмите .
Если сервер принимает запросы по сети, к нему можно подключиться с помощью броузера, работающего на другом компьютере, например:
httр://host.domain.com:4000/diskfree
Если задать опцию --verbose
( -v
), сервер при запуске отобразит свою конфигурационную информацию, а затем будет показывать IP-адрес каждого подключающегося к нему клиента. Если подключаться через интерфейс localhost
, клиентский адрес всегда будет равен 127.0.0.1.
С помощью опции --module-dir
( -m
) можно указать другой каталог размещения серверных модулей. По умолчанию они находятся там же, где и программа server
.
Те, кто забыли или не знают синтаксис опций командной строки, могут вызвать программу server
с опцией --help
( -h
):
% ./server --help
Usage: ./server [ options ]
-a, --address ADDR Bind to local address (by default, bind
to all local addresses).
-h, --help Print this information.
-m, --module-dir DIR Load modules from specified directory
(by default, use executable directory).
-p, --port PORT Bind to specified port.
-v, --verbose Print verbose messages.
Планируя распространять программу в Internet, не забудьте написать для нее документацию. Многие люди не осознают, что создать качественную документацию так же трудно и долго, как и написать хорошую программу. Правда, вопрос подготовки документации — тема отдельной книги, поэтому мы лишь укажем, где можно получить информацию по данной теме.
Вероятнее всего, для программы потребуется создать man
-страницу. Это первое место, куда пользователи обращаются за информацией о программе. Страницы интерактивной документации форматируются с помощью классической программы troff
. Чтобы узнать формат troff
-файлов, введите такую команду:
Читать дальше