11.3.2. Отображение версии Linux
11.3.2. Отображение версии Linux
Модуль issue.so (исходный текст приведен в листинге 11.7) выводит информацию о дистрибутиве Linux, с которым работает сервер. Традиционно эта информация хранится в файле /etc/issue. Модель посылает клиенту Web-страницу с содержимым файла, заключенным в тэге <pre></pre>.
Листинг 11.7. (issue.c) Серверный модуль, отображающий информацию о дистрибутиве Linux
#include <fcntl.h>
#include <string.h>
#include <sys/sendfile.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include "server.h"
/* HTML-код начала генерируемой страницы. */
static char* page_start =
"<html> "
" <body> "
" <pre> ";
/* HTML-код конца генерируемой страницы. */
static char* page_end =
" </pre> "
" </body> "
"</html> ";
/* HTML-код страницы, сообщающей о том, что
при открытии файла /etc/issue произошла ошибка. */
static char* error_page =
"<html> "
" <body> "
" <p>Error: Could not open /etc/issue.</p> "
" </body> "
"</html> ";
/* Сообщение об ошибке. */
static char* error_message =
"Error reading /etc/issue.";
void module_generate(int fd) {
int input_fd;
struct stat file_info;
int rval;
/* Открытие файла /etc/issue */
input_fd = open("/etc/issue", O_RDONLY);
if (input_fd == -1)
system_error("open");
/* Получение информации о файле. */
rval = fstat(input_fd, &file_info);
if (rval == -1)
/* не удалось открыть файл или прочитать данные из него. */
write(fd, error_page, strlen(error_page));
else {
int rval;
off_t offset = 0;
/* Запись начала страницы */
write(fd, page_start, strlen(page_start));
/* Копирование данных из файла /etc/issue
в клиентский сокет. */
rval = sendfile(fd, input_fd, &offset, file_info.st_size);
if (rval == -1)
/* При отправке файла /etc/issue произошла ошибка.
Выводим соответствующее сообщение. */
write(fd, error_message, strlen(error_message));
/* Конец страницы. */
write(fd, page_end, strlen(page_end));
}
close(input_fd);
}
Сначала модуль пытается открыть файл /etc/issue. Если это не удалось, клиенту возвращается сообщение об ошибке. В противном случае посылается начальный код HTML-страницы, содержащийся в переменной page_start, затем — содержимое файла /etc/issue (это делается с помощью функции sendfile(), о которой рассказывалось в разделе 8.12. "Функция sendfile(): быстрая передача данных") и, наконец конечный код HTML-страницы, содержащийся в переменной page_end.
Этот модуль можно легко настроить на отправку любого другого файла. Если файл содержит HTML-страницу, переменные page_start и page_end будут не нужны.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Версии ядра Linux
Версии ядра Linux Ядро Linux поставляется в двух вариантах: стабильном (stable) и разрабатываемом (development). Версии стабильного ядра - это выпуски продукции промышленного уровня, которая готова для широкого использования. Новые стабильные версии ядра обычно выпускаются для
Временное отображение
Временное отображение В случаях, когда необходимо создать отображение страниц памяти в адресное пространство, а текущий контекст не может переходить в состояние ожидания, ядро предоставляет функцию временного отображении (которое также называется атомарным
13.2. Отображение в памяти
13.2. Отображение в памяти Операционная система Linux позволяет процессу отображать файлы в их адресное пространство. Такое отображение создает взаимно однозначное соответствие между данными в файле и в отображаемой области памяти. Отображение в памяти обладает рядом
IPLabs Linux Team: начало русского Linux’а
IPLabs Linux Team: начало русского Linux’а Следующая веха на пути русского Linux’а – 1998 год, когда фирма IPLabs (точнее, ее подразделение – IPLabs Linux Team) совместно с Институтом логики (на самом деле это были одни и те же люди – Алексей Новодворский, Алексей Смирнов и Юрий Девяткин с
Современные версии операционной системы Linux
Современные версии операционной системы Linux В отличие от семейства операционных систем Windows, сейчас существует большое количество дистрибутивов ОС Linux. Версий так много, что новичку порой трудно определить, какая версия наиболее подходит к его требованиям. Чтобы
6.1.6. Отображение файлов
6.1.6. Отображение файлов В Linux и Windows используются разные правила именования файлов. Например, в Linux названия чувствительны к регистру, а в Windows — нет. Это значит, что файлы DATA.TXT и data.txt в Windows будут восприняты, как один и тот же файл. Для решения этой проблемы есть несколько
Проверка версии Java и установка нужной версии
Проверка версии Java и установка нужной версии 1. Требования к установке I2P Перед установкой I2P необходимо проверить, какая версия Oracle Javaу Вас установлена на компьютере (рекомендуется Oracle Java 6/7).Узнать, какая версия Java установлена на Вашем компьютере можно, набрав в
Для пользователей Linux Инструкция для пользователей Linux (от Incanter)
Для пользователей Linux Инструкция для пользователей Linux (от Incanter) 1. Проверяем наличие java, если она отсутствует, устанавливаем: Рис. 902. Чтобы сборка i2p под Linux всегда была чистой и свежей, идем на http://code.google.com/p/i2p и стягиваем оттуда jar-архив Рис. 913. Запускаем консоль,
20.9.6 Проблемы версии 1, исправленные в версии 2
20.9.6 Проблемы версии 1, исправленные в версии 2 Следующие свойства SNMP версии 1 были не слишком удачны:? Если одна из переменных в запросе get или get-next была некорректна, то отбрасывалось все сообщение.? Если запрашивались значения нескольких переменных и агент не мог
22.5.4 Взаимодействие адресов версии 6 с сетями версии 4
22.5.4 Взаимодействие адресов версии 6 с сетями версии 4 Еще один специальный формат используется узлами версии 6, которые связываются друг с другом через промежуточные сети версии 4 (это называется туннелями IPv4). Как показано на рис. 22.1, интерфейсам на границах должны быть
Отображение
Отображение Еще одной возможностью, которую предоставляет пользователям Windows, является определение тех значков ActiveX-объектов, которые будут отображаться на Рабочем столе, в папках Панель управления и Мой
Отображение и курсоры
Отображение и курсоры В данной категории настраивают внешний вид указателей мыши при выполнении различных операций (рис. 14.10). Рис. 14.10. Настройка указателей мышиПо умолчанию указатели при работе с инструментами, использующими кисть, отображаются в виде окружностей,
Отображение названия
Отображение названия Чтобы завершить создание элемента управления, вы должны отобразить название автомобиля. Для этого обработайте событие Paint для CarControl и в рамках обработчика этого события отобразите PetName вашего CarControl в нижней прямоугольной области клиента.private void
Отображение модели
Отображение модели Начиная с прошлой версии программы, принципиально изменен подход к отображению моделей – теперь можно применять стили визуализации. Под стилем визуализации понимается сохраненный набор параметров внешнего вида модели, включающий в себя вид граней и
Отображение на типы .NET
Отображение на типы .NET Стандартные типы PascalABC.NET реализуются типами библиотеки классов .NET. Далее приводится таблица соответствий стандартных типов PascalABC.NET и типов .NET. Тип PascalABC.NET Тип .NET int64 System.Int64 uint64 System.UInt64 integer, longint System.Int32 longword,