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

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

Жанры

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

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

Шрифт:

Заблокированный файл

/tmp/test-file
находится на устройстве со старшим и младшим номерами 8 и 5 соответственно. Это номера устройства
/dev/sda5
:

% df /trap

Filesystem 1k-blocks Used Available Use% Mounted on

/dev/sda5 8459764 5094292 2935736 63% /

% ls -l /dev/sda5

brw-rw---- 1 root disk 8, 5 May 5 1998 /dev/sda5

На этом устройстве с файлом

/tmp/test-file
связав
индексный дескриптор 181288:

% ls --inode /trap/test-file

181288 /tmp/test-file

7.6. Системная статистика

Два элемента файловой системы

/proc
содержат полезную статистическую информацию. В файле
/proc/loadavg
находятся данные о загруженности системы. Первые три показателя — это число активных задач (выполняющихся процессов) за последние 1, 5 и 15 минут. Следующая строка отображает число выполняемых задач (процессов, запланированных к выполнению, а не заблокированных в каком-нибудь системном вызове) в данный момент времени и общее число процессов в системе. Последняя строка содержит идентификатор самого недавнего процесса.

В файле

/proc/uptime
отражено, сколько времени прошло с момента загрузки системы и сколько времени с тех пор система пребывала в неактивном состоянии. Оба показателя выражены в секундах и представлены числами с плавающей запятой:

% cat /proc/uptime

3248936.18 3072330.49

Программа, показанная в листинге 7 7. определяет общее время работы и время простоя системы и отображает эти значения в понятном формате.

Листинг 7.7. (print-uptime.c) Отображение времени работы и времени простоя системы

#include <stdio.h>

/* Запись результата в стандартный выходной поток.

Параметр TIME это количество времени, а параметр LABEL --

короткая описательная строка. */

void print_time(char* label, long time) {

 /* Константы преобразования. */

 const long minute = 60;

 const long hour = minute * 60;

 const long day = hour * 24; /* Вывод результата. */

 printf("%s: %ld days, %ld:%02ld:%02ld\n", label, time / day,

(time % day) / hour, (time % hour) / minute, time % minute);

}

int main {

 FILE* fp;

 double uptime, idle_time;

 /* Чтение показателей времени из файла /proc/uptime. */

 fp = fopen("/proc/uptime", "r");

 fscanf(fp, "%lf %lf\n", &uptime, &idle_time);

 fclose(fp);

 /*
Форматирование и вывод. */

 print_time("uptime ", (long)uptime);

 print_time("idle time", (long)idle_time);

 return 0;

}

Общее время работы системы отображают также команда

uptime
и функция
sysinfo
(описана в разделе 8.14, "Функция sysinfo: получение системной статистики"). Команда
uptime
дополнительно выдает показатели средней загруженности, извлекаемые из файла
/proc/loadavg
.

Глава 8

Системные вызовы Linux

Мы уже познакомились с большим количеством функций, реализующих различные системные задачи, например анализ командной строки, манипулирование процессами и отображение файлов в памяти. Если присмотреться повнимательнее, то окажется, что все они подпадают под две категории в зависимости от способа реализации.

■ Библиотечная функция — это обычная функция, которая находится во внешней библиотеке, подключаемой к программе. Большинство рассмотренных нами функций содержится в стандартной библиотеке языка С,

libc
. Вызов библиотечной функции реализуется традиционно: ее аргументы помещаются в регистры процессора или в стек и управление передается в начало кода функции (этот код находится в библиотеке, загруженной в память).

■ Системный вызов реализован в ядре Linux. Аргументы вызова упаковываются и передаются ядру, которое берет на себя управление программой, пока вызов не завершится. Системный вызов — это не обычная функция, и для передачи управления ядру требуется специальная подпрограмма. В GNU-библнотеке языка С (реализация стандартной библиотеки, имеющаяся в Linux) для системных вызовов созданы функции-оболочки, упрощающие обращение к ним. В качестве примеров системных вызовов можно привести низкоуровневые функции ввода-вывода, такие как

open
и
read
.

Совокупность системных вызовов Linux формирует основной интерфейс между программами и ядром. Каждому вызову соответствует некая элементарная операция или функция.

Некоторые системные вызовы оказывают очень большое влияние на систему. Например. есть вызовы, позволяющие завершить работу Linux, выделить системные ресурсы или запретить другим пользователям доступ к ресурсам. С такими вызовами связано ограничение: только процессы, выполняющиеся с привилегиями суперпользователя (учетная запись

root
), имеют право обращаться к ним. В противном случае вызовы завершатся ошибкой.

Внутри себя библиотечная функция может обращаться к другим функциям или системным вызовам.

В настоящее время в Linux есть около 200 системных вызовов. Их список находится в файле

/usr/include/asm/unistd.h
. Некоторые из них используются только внутри системы, а некоторые предназначены лишь для реализации специализированных библиотечных функций. В этой главе будут рассмотрены те системные вызовы, которые чаще всего используются системными программистами.

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

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Его огонь горит для меня. Том 2

Муратова Ульяна
2. Мир Карастели
Фантастика:
юмористическая фантастика
5.40
рейтинг книги
Его огонь горит для меня. Том 2

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

Совершенно несекретно

Иванов Дмитрий
15. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Совершенно несекретно

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

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

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Единственная для темного эльфа 3

Мазарин Ан
3. Мир Верея. Драконья невеста
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Единственная для темного эльфа 3

Жандарм

Семин Никита
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Жандарм

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Прогрессор поневоле

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

Наследие Маозари 6

Панежин Евгений
6. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 6

Я еще не барон

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

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита