2012-03-05 3 views
5

Я следил за просмотром различных файлов заголовков ядра и наткнулся на <linux/kernel.h>. Внутри это структура, называемая sysinfo.sysinfo struct in linux/kernel.h

Я пробовал использовать его из коробки, так сказать, и все значения в структуре возвращены 0. Я предполагаю, что мне нужно использовать функцию poplating выше, называемую do_sysinfo(struct sysinfo *info).

Дело в том, что я не могу найти информацию о том, как ее использовать. Я попробовал функцию из коробки, и она потерпела неудачу, потому что она не могла быть связана. У кого-нибудь есть информация о том, как использовать это или почему он не работает? Я новичок в этой области. Если бы у вас были какие-либо ссылки на хорошие гиды/информацию, это было бы здорово.

ответ

5

Я предполагаю, что вы пытались вызвать эту функцию из пользовательского пространства. Это невозможно, так как этот заголовок используется только для использования ядра, за исключением того, что struct sysinfo является «общим».

Возможно, вы захотите использовать системный вызов int sysinfo(struct sysinfo *info), включив sys/sysinfo.h, чтобы заполнить struct sysinfo.

4

do_sysinfo - реализация на стороне ядра; он недоступен из userland. Системный вызов sysinfo доступен; это то, что заполнит структуру:

#include <sys/sysinfo.h> 

... 

struct sysinfo info; 
sysinfo(&info); 

Обратите внимание, что есть намного больше информации по разборе файлов в /proc (например, /proc/uptime, /proc/cpuinfo, /proc/meminfo).

+2

Во-первых, спасибо всем за ответ на мой вопрос. Огромная помощь! Если серьезно. Где вы все это изучаете? Подобного знания нигде не найти в Интернете. Его боль, чтобы узнать эти маленькие детали. Любые ссылки на классные вещи? –