Страницы

Поиск по вопросам

вторник, 18 декабря 2018 г.

Как передать данные “загрузки” cpu в программу на с\с++?

Суть в следующем: я хочу передать в программу на с\с++ данные о загрузке cpu или gpu(например, температуру) на linux(ubuntu 16.04), но не используя при этом посторонних утилит типа lm sensors. Т.е. я хочу извлекать данные напрямую с датчиков(если это возможно) и передавать их в программу для дальнейших действий, либо как-то получать эти данные в процессе работы программы. Видел много ответов по поводу подобных действий с использованием winapi, но под linux что-то не нашел(или проглядел). А теперь, внимание, вопрос: мб кто-то сталкивался с этим\писал что-то подобное\знает что гуглить на эту тему или даже вдруг знает, как это реализовать? Заранее благодарен!


Ответ

Непосредственно с датчиков вы эти данные никак не получите. Ядро linux не позволит пользовательскому приложению обращаться напрямую к оборудованию. Кроме того, вам фактически придется реализовывать собственный lm_sensors, потому как на разных чипсетах данные получаются различным образом и по факту нужны драйвера для каждого конкретного датчика. Драйвера датчиков в linux уже есть и они как раз зовутся lm_sensors (ядерная часть, а не утилита). Обратите внимание, в windows точно так же, есть драйвера в ядре и есть интерфейс winapi.
В linux получить всю информацию от драйверов датчиков, а так же управлять некоторыми параметрами (скоростью вращения вентиляторов и пределами) можно через файловый интерфейс /sys/class/hwmon и /sys/bus/platform/devices/coretemp.0. Описание интерфейса можно найти в файле Documentation/hwmon/sysfs-interface исходников ядра.
Загрузку процессоров можно посчитать на основе данных из файла /proc/stat. Описание этого интерфейса можно найти в Documentation/filesystems/proc.txt исходников ядра.

Комментариев нет:

Отправить комментарий