При обращении к файлу /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
#include
/* Определение частоты процессора в мегагерцах на
основании данных файла /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. Программа должна вести себя корректно в случае, если нужный файл отсутствует или имеет иной формат.
Файловая система /proc
содержит по одному каталогу для каждого выполняющегося в данный момент процесса. Именем каталога является идентификатор процесса. [22] В некоторых UNIX-системах эти идентификаторы дополняются нулями, в Linux — нет.
Каталоги появляются и исчезают динамически по мере запуска и завершения процессов. В каждом каталоге имеются файлы, предоставляющие доступ к различной информации о процессе. Собственно говоря, на основании этих каталогов файловая система /proc
и получила свое имя.
В каталогах процессов находятся следующие файлы.
■ cmdline
. Содержит список аргументов процесса; описан в разделе 7.2.2, "Список аргументов процесса".
■ cwd
. Является символической ссылкой на текущий рабочий каталог процесса (задаётся, к примеру, функцией chdir()
).
■ environ
. Содержит переменные среды процесса; описан в разделе 7.2.3, "Переменные среды процесса".
■ exe
. Является символической ссылкой на исполняемый файл процесса; описан в разделе 7.2.4. "Исполняемый файл процесса".
■ fd
. Является подкаталогом, в котором содержатся ссылки на файлы, открытые процессом: описан в разделе 7.2.5, "Дескрипторы файлов процесса".
■ maps
. Содержит информацию о файлах, отображаемых в адресном пространстве процесса. О механизме отображения файлов в памяти рассказывалось в главе 5. "Взаимодействие процессов". Для каждого такого файла выводится соответствующий диапазон адресов в адресном пространстве процесса, права доступа, имя файла и пр. К числу отображаемых файлов относятся исполняемый файл процесса, а также загруженные библиотеки.
■ root
. Является символической ссылкой на корневой каталог процесса (обычно это /
). Корневой каталог можно сменить с помощью команды chroot
или функции chroot()
.
■ stat
. Содержит статистическую информацию о процессе. Эти же данные представлены в файле status
, но здесь они находятся в неотформатированном виде и записаны в одну строку. Такой формат труден для восприятия, зато проще в плане синтаксического анализа.
Читать дальше