Что находится в файле /proc/version
? Он содержит строку, описывающую номер версии ядра Linux. Сюда входит информация, возвращаемая системным вызовом uname()
(описан в разделе 8.15, "Функция uname()
"), а также номер версии компилятора, с помощью которого было создано ядро. Чтение из файла /proc/version
осуществляется самым обычным образом, например с помощью команды cat
:
% 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
и определят частоту процессора.
/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() {