Программирование для Linux. Профессиональный подход
Шрифт:
% cat /proc/version
Linux version 2.2.14-5.0 ([email protected])
(gcc version egcs-2.91.66 19990314/Linux
(egcs-1.1.2 release)) #1 Tue Mar 7 21:07:39 EST 2000
Многие элементы файловой системы
/proc
описаны на man
– странице proc
(раздел 5). В этой главе будут рассмотрены те из них, которые чаще всего используются программистами и полезны при отладке. Читатели, которых интересуют детали функционирования файловой системы
/proc
,
/usr/src/linux/fs/proc/
. 7.1. Извлечение информации из файловой системы /proc
Большинство элементов файловой системы
/proc
выдает информацию в отформатированном виде. Например, файл /proc/cpuinfo
содержит сведения о процессоре (или процессорах, если это многопроцессорный компьютер). Выходная информация представляется в виде таблицы значений, по одному на строку. Каждое значение сопровождается символическим идентификатором. При обращении к файлу
/proc/cpuinfo
будет выдана примерно следующая информация: % cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 5
model name : Pentium II (Deschutes)
stepping : 2
cpu MHz : 400.913520
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
sep_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr рае mce cx8 apic sep
mtrr pge mce cmov pat pse36 mmx fxsr
bogomips : 399.77
Интерпретация некоторых значений даны в разделе 7.3.1. "Центральный процессор". Если нужно получить одно из этих значений в программе, проще всего загрузить файл в память и просканировать его функцией
sscanf
. В листинге 7.1 показано, как это сделать. В программе имеется функция get_cpu_clock_speed
, которая загружает файл /proc/cpuinfo
и определят частоту процессора. Листинг 7.1. (clock-speed.c) Определение частоты процессора путем анализа файла
/proc/cpuinfo
#include <stdio.h>
#include <string.h>
/* Определение частоты процессора в мегагерцах на
основании данных файла /proc/cpuinfo. В
многопроцессорной системе будет найдена частота
первого процессора. В случае ошибки возвращается нуль. */
float get_cpu_clock_speed {
FILE* fр;
char buffer[1024];
size_t bytes_read;
char* match;
float clock_speed;
/*
Загрузка всего файла /proc/cpuinfo в буфер. */
fp = fopen("/proc/cpuinfo", "r");
bytes_read = fread(buffer, 1, sizeof(buffer), fp);
fclose(fp);
/* Выход, если прочитать файл не удалось или буфер оказался
слишком маленьким. */
if (bytes_read == 0 || bytes_read = sizeof(buffer))
return 0;
/* Буфер завершается нулевым символом. */
buffer[bytes_read] = '\0';
/* Поиск строки, содержащей метку "cpu MHz". */
match = strstr(buffer, "cpu MHz");
if (match == NULL)
return 0;
/* Анализ строки и выделение из нее значения частоты
процессора. */
sscanf(match, "cpu MHz ; %f" &clock_speed);
return clock_speed;
}
int main {
printf("CPU clock speed: %4.0f Mhz\n",
get_cpu_clock_speed);
return 0;
}
He забывайте о том. что имена, семантика и формат представления элементов файловой системы
/proc
меняются при обновлении ядра Linux. Программа должна вести себя корректно в случае, если нужный файл отсутствует или имеет иной формат. 7.2. Каталоги процессов
Файловая система
/proc
содержит по одному каталогу для каждого выполняющегося в данный момент процесса. Именем каталога является идентификатор процесса. [22] Каталоги появляются и исчезают динамически по мере запуска и завершения процессов. В каждом каталоге имеются файлы, предоставляющие доступ к различной информации о процессе. Собственно говоря, на основании этих каталогов файловая система /proc
и получила свое имя.22
В некоторых UNIX-системах эти идентификаторы дополняются нулями, в Linux — нет.
В каталогах процессов находятся следующие файлы.
■
cmdline
. Содержит список аргументов процесса; описан в разделе 7.2.2, "Список аргументов процесса". ■
cwd
. Является символической ссылкой на текущий рабочий каталог процесса (задаётся, к примеру, функцией chdir
). ■
environ
. Содержит переменные среды процесса; описан в разделе 7.2.3, "Переменные среды процесса". ■
exe
. Является символической ссылкой на исполняемый файл процесса; описан в разделе 7.2.4. "Исполняемый файл процесса".
Поделиться:
Популярные книги
Измена. Тайный наследник
1. Тайный наследник
Фантастика:
фэнтези
5.00
рейтинг книги
Инквизитор Тьмы
1. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Наследник
3. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Ротмистр Гордеев 3
3. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
(Не)нужная жена дракона
5. Хроники Драконьей империи
Любовные романы:
любовно-фантастические романы
6.89
рейтинг книги
Идеальный мир для Лекаря 28
28. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Сыночек в награду. Подари мне любовь
1. Суровые отцы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Инквизитор Тьмы 2
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Генерал Скала и ученица
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Искатель 1
1. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Сердце Дракона. Том 10
10. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.14
рейтинг книги
Печать мастера
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Выстрел на Большой Морской
4. Сыщик Его Величества
Детективы:
исторические детективы
полицейские детективы
8.64
рейтинг книги
Кодекс Крови. Книга VII
7. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
аниме
5.00