Книга: Программирование для Linux. Профессиональный подход
Листинг 11.6. (time.c) серверный модуль, отображающий текущее время
Листинг 11.6. (time.c) серверный модуль, отображающий текущее время
#include <assert.h>
#include <stdio.h>
#include <sys/time.h>
#include <time.h>
#include "server.h"
/* шаблон HTML-страницы, генерируемой данным модулем. */
static char* page_template =
"<html>n"
" <head>n"
" <meta http-equiv="refresh" content="5">n"
" </head>n"
" <body>n"
" <p>The current time is %s </p>n"
" </body>n"
"</html>n";
void module_generate(int fd) {
struct timeval tv;
struct tm* ptm;
char time_string[40];
FILE* fp;
/* Определение времени суток и заполнение структуры типа tm. */
gettimeofday(&tv, NULL);
ptm = localtime(&tv.tv_sec);
/* Получение строкового представления времени с точностью
до секунды. */
strftime(time_string, sizeof(time_string), "%H:%M:%S", ptm);
/* Создание файлового потока, соответствующего дескриптору
клиентского сокета. */
fp = fdopen(fd, "w");
assert(fp != NULL);
/* Запись HTML-страницы. */
fprintf(fp, page_template, time_string);
/* Очистка буфера потока */
fflush(fp);
}
Для удобства в этом модуле используются стандартные библиотечные функции ввода-вывода. Функция fdopen()
возвращает указатель потока (FILE*
), соответствующий дескриптору клиентского сокета (подробнее об этом рассказывается в приложении Б, "Низкоуровневый ввод-вывод"). Для отправки страницы клиенту вызывается обычная функция fprintf()
, а функция fflush()
предотвращает потерю данных в случае закрытия сокета.
HTML-страница, возвращаемая модулем time.so
, содержит в заголовке тэг <meta>
, который служит клиенту указанием перезагружать страницу каждые 5 секунд. Благодаря этому клиент всегда будет знать точное время.
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Улучшенное время отклика для версии SuperServer
- Ограничение времени ожидания для транзакций (Lock timeout)
- Часы в Windows показывают неправильное время
- DEADLOCK TIMEOUT
- CONNECTION TIMEOUT
- Глава 7. Дата и время
- Timestamp request
- Глава 18 Время
- 1.4.1. Кодирование во время выполнения
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Время и дата