Страницы

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

вторник, 31 декабря 2019 г.

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

#cpp #linux #c #ubuntu


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


Ответы

Ответ 1



Непосредственно с датчиков вы эти данные никак не получите. Ядро 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 исходников ядра.

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

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