11.3.3. Отображение объема свободного дискового пространства
11.3.3. Отображение объема свободного дискового пространства
Модуль diskfree.so (исходный текст приведен в листинге 11.8) генерирует страницу с информацией о свободном дисковом пространстве в файловых системах, смонтированных на серверном компьютере. Эта информация берется из выходных данных команды df -h. Как и в модуле issue.so, выходные данные заключаются в тэги <pre></pre>.
Листинг 11.8. (diskfree.c) Серверный модуль, отображающий информацию о свободном дисковом пространстве
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include "server.h"
/* HTML-код начала генерируемой страницы. */
static char* page_start =
"<html> "
" <body> "
" <pre> ";
/* HTML-код конца генерируемой страницы. */
static char* page_end =
" </pre> "
" </body> "
"</html> ";
void module_generate(int fd) {
pid_t child_pid;
int rval;
/* Запись начала страницы. */
write(fd, page_start, strlen(page_start));
/* Создание дочернего процесса. */
child_pid = fork();
if (child_pid == 0) {
/* Это дочерний процесс. */
/* Подготовка списка аргументов команды df. */
char* argv[] = { "/bin/df, "-h", NULL };
/* Дублирование потоков stdout и stderr для записи данных
в клиентский сокет. */
rval = dup2(fd, STDOUT_FILENO);
if (rval == -1)
system_error("dup2");
rval = dup2(fd, STDERR_FILENO);
if (rval == -1)
system_error("dup2");
/* Запуск команды df, отображающей объем свободного
пространства в смонтированных файловых системах. */
execv(argv[0], argv);
/* Функция execv() возвращает управление в программу только
при возникновении ошибки. */
system_error("execv");
} else if (child_pid > 0) {
/* Это родительский процесс, дожидаемся завершения дочернего
процесса. */
rval = waitpid(child_pid, NULL, 0);
if (rval == -1)
system_error("waitpid");
} else
/* Вызов функции fork() завершился неудачей. */
system_error("fork");
/* запись конца страницы. */
write(fd, page_end, strlen(page_end));
}
В то время как модуль issue.so посылает содержимое файла с помощью функции sendfile(), данный модуль должен вызвать внешнюю команду и перенаправить результаты ее работы клиенту. Для этого модуль придерживается такой последовательности действий.
1. Сначала с помощью функции fork() создается дочерний процесс (см. раздел 3.2.2. "Функции fork() и exec()").
2. Дочерний процесс копирует дескриптор сокета в дескрипторы STDOUT_FILENO и STDERR_FILENO, соответствующие стандартным потокам вывода и ошибок (см. раздел 2.1.4, "Стандартный ввод-вывод"). Это копирование осуществляется с помощью системного вызова dup2() (см. раздел 5.4 3. "Перенаправление стандартных потоков ввода, вывода и ошибок"). Все последующие данные, записываемые в эти потоки в рамках дочернего процесса, будут направляться в сокет.
3. Дочерний процесс с помощью функции execv() вызывает команду df -h.
4. Родительский процесс дожидается завершения дочернего процесса, вызывая функцию waitpid() (см. раздел 5.4 2. "Системные вызовы wait()").
Этот модуль можно легко настроить на вызов другой системной команды.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Отчет об использовании дискового пространства
Отчет об использовании дискового пространства Напишем сценарий DrivesReport.js, который будет создавать таблицу использования дискового пространства для дисков всех типов (съемных, жестких и сетевых), имеющихся на компьютере, в следующем формате: Диск: буква_диска Метка
Начало свободного софта
Начало свободного софта Говоря в главе первой об истоках и предпосылках истории FOSS, я упомянул общественные движения Open Source Software и Free Software, однако больше не прибавил о них ни слова. Настало время восполнить это упущение.Под открытым и свободным программным обеспечением,
5.3. Пулинг (свободного) ПО
5.3. Пулинг (свободного) ПО Исследование с крайне интересным предметом по заказу Еврокомиссии выполнено экспертами компании Unisys Management Consulting30. В отличие от большинства исследований, посвященных участию государства в СПО, оно сосредоточено не на вопросах применения
3.23. Как отключить сообщение о том что недостаточно свободного места на диске?
3.23. Как отключить сообщение о том что недостаточно свободного места на диске? Создайте в реестре, по пути HKEY_CURRENT_USER Software Microsoft Windows CurrentVersion Policies Explоrer Ключ типа DWORD под названием NoLowDiskSpaceChecks, и присвойте ему значение 1.
8.6.2. Освобождение дискового пространства
8.6.2. Освобождение дискового пространства Теперь вы знаете, как определить, сколько места займет на диске устанавливаемый пакет, и каков объем свободного пространства на диске. Рассмотрим, что можно сделать, если свободного места не достаточно. Надо заметить, что при
16.2. Структура дискового раздела в ext2fs
16.2. Структура дискового раздела в ext2fs Производители жестких дисков обычно поставляют свои изделия отформатированными на низком уровне. Насколько я знаю, это означает, что все дисковое пространство с помощью специальных меток разбито на "сектора", размером 512 байт. Такой
Сообщения о недостатке свободного места на диске
Сообщения о недостатке свободного места на диске По умолчанию если на диске остается меньше 10% свободного места, то система выдает сообщение об этом и просит очистить диск от ненужных программ. В наше время, когда жесткие диски объемом в 200 Гбайт не редкость, порог в 10% уже
Изменение порога выдачи предупреждения о недостатке свободного места на диске
Изменение порога выдачи предупреждения о недостатке свободного места на диске Если на вашем диске остается свободным менее 10% (по умолчанию) места, то система информирует об этом появлением иконки в области уведомления (рядом с часиками). На дисках маленькой емкости этот
ОПЫТЫ:В поисках свободного места
ОПЫТЫ:В поисках свободного места Как правило, заимствованные из других языков слова мы используем бездумно, не чувствуя ни этимологию слова, ни его буквальное значение. Поэтому Samsung M70 можно смело назвать и ноутбуком, и лэптопом, и портативным компьютером - ни одно из этих
ГЛАВА 1. Ричард Столлман — дзен свободного программирования
ГЛАВА 1. Ричард Столлман — дзен свободного программирования Ричард Мэттью Столлман — известный американский программист и общественный деятель. Является создателем программ GNU Emacs, коллекции компиляторов GNU (GCC) и отладчика GNU (GDB). Основатель движения свободного ПО,
1.2. Производительность и объем дискового пространства
1.2. Производительность и объем дискового пространства Windows 7 уже не кажется неповоротливым монстром, пожирающим системные ресурсы вашего компьютера. Тому есть две причины. Первая причина — в Microsoft действительно уделили много внимания оптимизации системы. Например,
Алексей Смирнов (ALT Linux) о цене свободного софта Евгений Крестников
Алексей Смирнов (ALT Linux) о цене свободного софта Евгений Крестников ОпубликованоЕвгений Крестников В последний день августа газета «Ведомости» опубликовала статью о проведенном российским отделением IDC исследовании. Ссылаясь на авторитетное
Ошибка 0x0000004D: нет свободного места!
Ошибка 0x0000004D: нет свободного места! Не хватает места на диске для завершения операции. Пора покупать винчестер побольше. Не забудьте и оперативки захватить – она сейчас дешевая. А пока просто перенесите файл подкачки на другой раздел жесткого диска или создайте