Linux c ++: apis vs / proc файлы? - PullRequest
       12

Linux c ++: apis vs / proc файлы?

10 голосов
/ 10 января 2011

Я работаю над приложением для сбора и отправки различной информации о системе (свободное место на диске, информация о батарее ноутбука и т. Д.). У меня нет большого успеха, получая эту информацию в виде прямого c ++ api .. хотя все это доступно через файлы в / proc (или аналогичные).

Итак - мне интересно, является ли чтение / анализ этих файлов в моем приложении c ++ подходящим способом получения этой информации, или я должен продолжать пытаться обнаружить API? (ПРИМЕЧАНИЕ: я работаю с statvfs).

Пока что похоже, что легче собрать такую ​​информацию в Win32. Кажется странным.

Ответы [ 3 ]

7 голосов
/ 10 января 2011

Лучше всего на сегодняшний день придерживаться API в следующем порядке приоритета.

  • Ваш языковой API (здесь вам не очень помогает, но, скажем, для строк, строковую функцию C99 лучше использовать, чем библиотечную строковую функцию, указанную в Posix или другом стандарте ОС.)

  • API-интерфейсы операционных программ Posix

  • Документированные API ядра

  • Недокументированные API ядра (по крайней мере, они сломают, скажем, пользователей ioctl, если они изменятся, поэтому они, вероятно, не изменятся)

  • /proc

  • /dev/kmem, /dev/mem

Нет оснований полагать, что троллинг /proc будет переносимым или даже одинаковым от выпуска к выпуску. Не в каждой системе даже установлен /proc!

Сказав все это, намного проще просто соскоблить материал с /proc, и если это единственный доступный интерфейс, то вы должны пойти дальше и использовать его. Qa

Наконец, порядок последних двух не совсем понятен, потому что /proc недоступен для анализа дампов после аварийного сбоя ядра, но инструменты, которые могут просмотреть дамп ядра, все равно будут работать.

1 голос
/ 10 января 2011

Я думал, что API / proc был API (все это файл ...)

0 голосов
/ 10 января 2011

Как вы заметили, большая часть информации о системах Linux находится в /proc. И вы правы, что часто не существует C API для получения этой информации (хотя обычно есть команда оболочки, если вы склонны придерживаться bash вместо C ++). В худшем случае вам может понадобиться анализировать /proc, хотя вы можете получить пример кода в виде команд оболочки с открытым исходным кодом для нужного вам элемента.

...