Чтение онлайн

на главную - закладки

Жанры

Программирование для Linux. Профессиональный подход

Самьюэл Алекс

Шрифт:

 user_name = get_user_name(uid);

 group_name = get_group_name(gid);

 /* Вычисляем длину строки, в которую будет помещен результат,

и выделяем для нее буфер. */

 result_length =

strlen(program_name) + strlen(user_name) +

strlen(group_name) + 128;

 result = (char*)xmalloc(result_length);

 /* Форматирование результата. */

 snprintf(result, result_length,

"<tr><td align=\" right\">%d</td><td><tt>%s</tt></td><td>%s</td>"

"<td>%s</td><td align= \"right\">%d</td></tr>\n",

(int)pid, program_name, user_name, group_name, rss);

 /* Очистка памяти. */

 free(program_name);

 free(user_name);

 free(group_name);

 /* Конец работы. */

 return result;

}

/* HTML-код начала страницы, содержащей таблицу процессов. */

static char* page_start =

 "<html>\n"

 " <body>\n"

 " <table cellpadding=\"4\" cellspacing=\"0\" border=\"1\">\n"

 " <thead>\n"

 " <tr>\n"

 " <th>PID</th>\n"

 " <th>Program</th>\n"

 " <th>User</th>\n"

 " <th>Group</th>\n"

 " <th>RSS&nbsp;(KB)</th>\n"

 " </tr>\n"

 " </thead>\n"

 " <tbody>\n";

/* HTML-код конца страницы, содержащей таблицу процессов. */

static char* page_end =

 " </tbody>\n"

 " </table>\n"

 " </body>\n"

 "</html>\n";

void module_generate(int fd) {

 size_t i;

 DIR* proc_listing;

 /* Создание массива iovec. В этот массив помещается выходная

информации, причем массив может увеличиваться динамически. */

 /* Число используемых элементов массива */

 size_t vec_length = 0;

 /* выделенный размер массива */

 size_t vec_size = 16;

 /* Массив элементов iovec. */

 struct iovec* vec =

(struct iovec*)xmalloc(vec_size *

sizeof(struct iovec));

 /* Сначала в массив записывается HTML-код начала страницы. */

 vec[vec_length].iov_base = page_start;

 vec[vec_length].iov_len = strlen(page_start);

 ++vec_length;

 /* Получаем список каталогов в файловой системе /proc. */

 proc_listing = opendir("/proc");

 if (proc_listing == NULL)

system_error("opendir");

 /* Просматриваем список каталогов. */

 while (1) {

struct dirent* proc_entry;

const char* name;

pid_t pid;

char* process_info;

/* Переходим к очередному элементу списка. */

proc_entry = readdir(proc_listing);

if (proc_entry == NULL)

/* Достигнут конец списка. */

break;

/* Если имя каталога не состоит из одних цифр, то это не

каталог процесса; пропускаем его. */

name = proc_entry->d_name;

if (strspn(name, "0123456789") != strlen(name))

continue;

/* Именем каталога является идентификатор процесса. */

pid = (pid_t)atoi(name);

/* генерируем HTML-код для строки таблицы, содержащей

описание данного процесса. */

process_info = format_process_info(pid);

if (process_info == NULL)

/* Произошла какая-то ошибка. Возможно, процесс уже

завершился. Создаем строку-заглушку. */

process_info =

"<tr><td colspan=\"5\">ERROR</td></tr>";

/* Убеждаемся в том, что в массиве iovec достаточно места

для записи буфера (один элемент будет добавлен в массив

по окончании обработки списка процессов). Если места

не хватает, удваиваем размер массива. */

if (vec_length == vec_size - 1) {

Поделиться:
Популярные книги

Мой муж – чудовище! Изгнанная жена дракона

Терин Рем
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Мой муж – чудовище! Изгнанная жена дракона

Андер Арес

Грехов Тимофей
1. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Андер Арес

Статьи

Переслегин Сергей Борисович
Документальная литература:
публицистика
5.00
рейтинг книги
Статьи

Гримуар темного лорда IV

Грехов Тимофей
4. Гримуар темного лорда
Фантастика:
фэнтези
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда IV

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4

Древесный маг Орловского княжества 2

Павлов Игорь Васильевич
2. Орловское княжество
Фантастика:
аниме
сказочная фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 2

Забытые боги

Рокотов Алексей
4. Путь князя
Фантастика:
фэнтези
рпг
попаданцы
5.00
рейтинг книги
Забытые боги

Эпоха Опустошителя. Том IV

Павлов Вел
4. Вечное Ристалище
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эпоха Опустошителя. Том IV

Я еще граф. Книга #8

Дрейк Сириус
8. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Я еще граф. Книга #8

Бастард Бога (Дилогия)

Матвеев Владимир
Фантастика:
альтернативная история
5.11
рейтинг книги
Бастард Бога (Дилогия)

Ваше Сиятельство 5

Моури Эрли
5. Ваше Сиятельство
Фантастика:
городское фэнтези
аниме
5.00
рейтинг книги
Ваше Сиятельство 5

Вернувшийся: Первые шаги. Том II

Vector
2. Вернувшийся
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Первые шаги. Том II

Ермак. Регент

Валериев Игорь
10. Ермак
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ермак. Регент

Корпорация М.И.Ф. (сборник)

Асприн Роберт Линн
Фантастика:
юмористическая фантастика
8.79
рейтинг книги
Корпорация М.И.Ф. (сборник)