LINUX.ORG.RU

Получение информации о компьютере с помощью API ядра Linux и языка Си

 ,


0

1

В ОС Windows информацию по АО и самой ОС можно получить в реестре, к примеру, используя WinAPI и язык Си.
Есть ли в ядре Linux, API функции для вывода примерно следующего:
- дата биос'а;
- дата видеокарты;
- производитель процессора;
- объем физической памяти;
- имя компьютера и пользователя;

Для определения производителя процессора можно штатными средствами (fopen, fread) прочитать файл /proc/cpuinfo.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)

man sysfs

man procfs

P.S. В мастдайке все через задницу. В линуксе все хорошо.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)

$ sudo dmidecode -q

anonymous
()
Ответ на: комментарий от nanoolinux

На bash'е можно без проблем. Но мне нужен именно язык Си.
Нашел, что можно определить имя компьютера и пользователя, используя ф-и библиотеки unistd.h
А что на счет остального? Как узнать какие библиотеки за что отвечают?

TRomario
() автор топика
Ответ на: комментарий от TRomario

А что на счет остального? Как узнать какие библиотеки за что отвечают?

См. исходники dmidecode.

dexpl ★★★★★
()
Ответ на: комментарий от Eddy_Em

Прочитаю, но они помимо необходимой информации, выдают ещё всякую ненужную всячину. Придётся обрабатывать текст, т.е лишняя рутиная работа.

TRomario
() автор топика
Ответ на: комментарий от TRomario

А по-другому никак. Это — интерфейс, который тебе предоставляет ядро. И с ним очень удобно работать.

Eddy_Em ☆☆☆☆☆
()

все пред.ответы в корне неверны.

по ЛЮБОЙ ОС единообразно информацию можно (и нужно) получать по протоколу SNMP. Программа которая полезет за датой биос в реестр наглухо привязывается к конкретной ОС, наличию и ключам реестра. Ровно как и программа которая полезет в /proc/... за подобным, привязывается к linux, версиям ядра и составу модулей.

дистроделов не включающих snmp по умолчанию, а также горе-админов которые её отключают надо убиват.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

дистроделов не включающих snmp по умолчанию, а также горе-админов которые её отключают надо убиват

Я очень люблю SNMP, однако я бы поспорил с этим советом...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

дистроделов не включающих snmp по умолчанию, а также горе-админов которые её отключают надо убиват

Я очень люблю SNMP, однако я бы поспорил с этим советом...

предлагаешь сначала морить без пива, а потом бить ногами?

MKuznetsov ★★★★★
()
Ответ на: комментарий от Eddy_Em

Что-то мне гугол подсказывает, что это совсем не то.

а программе юзера самой(sic!) лазить по закоулкам ОС это конечно то что надо :)

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Предложи, как узнать объем памяти, не читая /proc/meminfo

(причем, сделать это так же просто, без хитрых наворотов)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от ilammy

Знаю я про grep в командной оболочке..Вы предлагаете использовать это в языке Си? Тогда действительно тупость получается. Проще в командной оболочке писать..
Хочется использовать ф-и библиотеки языка Си. В книге «Основы программирования в Linux, 4 издание» есть примеры, которые показывают как определить имя пользователя и компьютера. Таким же образом хочется все остальные пункты задания выполнить..

TRomario
() автор топика
Ответ на: комментарий от TRomario

есть примеры, которые показывают как определить имя пользователя и компьютера

getlogin_r(), gethostname() ?

Кстати, можно это и своими силами сделать. Скажем, чтобы узнать имя пользователя, узнаем UID, а затем ищем такой UID в /etc/passwd → получаем имя пользователя и другую информацию.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Предложи, как узнать объем памяти, не читая /proc/meminfo

и пофиг на какой это системе, хоть на win (там точно нет /proc/meminfo):

snmpget -v 1 -c «public» localhost .1.3.6.1.4.1.2021.4.5.0

OID подсмотрел http://www.debianadmin.com/linux-snmp-oids-for-cpumemory-and-disk-statistics.... , наизусть слова и цифры ужо не помню

MKuznetsov ★★★★★
()
Ответ на: комментарий от Eddy_Em

Да, верно.
Все эти файлы в /proc - виртуальные, т.е создаются при обращении. Перед тем как поместить информацию в эти файлы, ядро откуда их(информацию) берёт? Может делать запрос к этому месту сбора информации и оттуда забирать? Зачем - в качестве усложнения задания

TRomario
() автор топика
Ответ на: комментарий от Eddy_Em

это как раз юниксвейно - есть тулза (и соотв.либа на горячо любимом С) которая умеет собирать по закоулкам и отдавать всякую инфу. Соотв. надо пользоваться ей, а не велосипедить getAmmountRAM() под все возможные системы.

MKuznetsov ★★★★★
()
Ответ на: комментарий от TRomario

ядро откуда их(информацию) берёт?

Это — дело ядра, откуда их брать. И уж юзера туда пускать точно нельзя.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от MKuznetsov

велосипедить getAmmountRAM() под все возможные системы.

Не надо велосипедить. Просто прочитать и распарсить /proc/meminfo. Системы, где этого файла нет, не нужны.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от robot12

Это при наличии установленного и настроенного snmpd :) ну и сконфигурированной сети. Ведь так ?

можно без сети..но snmpd должен быть. Я собственно в самом начале написал, что не-включение snmpd это админское свинство.

MKuznetsov ★★★★★
()
Ответ на: комментарий от Eddy_Em

Просто прочитать и распарсить /proc/meminfo. Системы, где этого файла нет, не нужны

а я вот такой linux видел :) и даже что-то в него пописывал..

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Это что ж за ирод отключил procfs? Яйца оторвать!

А вот snmpd нафиг не нужен. Я еще ни одного компьютера (в т.ч. сервера) не встречал, где был бы этот сервис запущен.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от TRomario

Знаю я про grep в командной оболочке..Вы предлагаете использовать это в языке Си? Тогда действительно тупость получается. Проще в командной оболочке писать

Не вижу тупости, вижу юникс-вей. Вам надо указанную информацию узнать или потренироваться в перекладывании байтиков на Си?

ilammy ★★★
()
Ответ на: комментарий от Eddy_Em

Я еще ни одного компьютера (в т.ч. сервера) не встречал, где был бы этот сервис запущен.

у вас видимо неленивые админы, любят посещать сервера и юзеров.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov
└► snmpget -v 1 -c public localhost .1.3.6.1.4.1.2021.4.5.0
Timeout: No Response from localhost.
└► su -c "dmidecode -q -t memory"
Длинный список разнообразных сведений

и пофиг на какой это системе, хоть на win

dexpl ★★★★★
()
Ответ на: комментарий от MKuznetsov

Зачем посещать? Скриптик запускаешь, он тебе по ssh к каждому компьютеру коннектится и выполняет нужное, сваливая все в файлы отчетов.

Юниксвейненько.

Но, на самом деле, обычно вижу, как админы вручную по ssh заходят. Что забавно, зайти могут только со своего компьютера, т.к. уже сто лет как позабыли рутовские пароли на всех компьютерах =D (чтобы su сделать, т.к. обычно закрыт ssh руту по паролю)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от KivApple

sysctl же! правда, это больше к BSD относится.

beastie ★★★★★
()
Ответ на: комментарий от Eddy_Em

Скриптик запускаешь, он тебе по ssh к каждому компьютеру коннектится и выполняет нужное, сваливая все в файлы отчетов.

Юниксвейненько.

Юниксвейненько.

Нет, Эдди, не юниксвейненько. Юниксвей, на который ты так яро дрочишь — 1 инструмент для одной задачи. А ты предлагаешь массу костылей, которые развалятся при парке машине больше 3 штук.

X10Dead ★★★★★
()

такой бред могут порождать только напрочь испорченные виндой мозги

зачем узнавать информацию об ос в винде? и так ясночто винда

anonymous
()
Ответ на: комментарий от Eddy_Em

уже сто лет как позабыли рутовские пароли на всех компьютерах

есть такое :)

CHIPOK ★★★
()
Ответ на: комментарий от X10Dead

которые развалятся при парке машине больше 3 штук.

вот позавчера я таким методом как Eddy_Em описал прошел успешно более 120 компов и ничего не розвалилось, так что очень даже юниксвейненько.

CHIPOK ★★★
()
Ответ на: комментарий от dexpl

Длинный список разнообразных сведений

и требование к повышению привелегий :-) «su»-же...

~ $ snmpwalk -v 1 -c public -O S localhost | wc -l
11329
~ $ dmidecode
# dmidecode 2.12
/dev/mem: Permission denied
MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

и требование к повышению привелегий

Зато не требуется работающий snmpd. И раз уж речь зашла, виндовый сервис snmp знает про .1.3.6.1.4.1.2021.4.3 (и про какие OID он вообще знает)?

dexpl ★★★★★
()
Ответ на: комментарий от TRomario

ядро откуда их(информацию) берёт?

Хороший вопрос всегда содержит в себе ответ на себя.

Пиши модуль ядра. Это не так сложно. Там тебе и Си и Kernel API.

tlx ★★★★★
()
Ответ на: комментарий от tlx

а вдруг по стечению обстоятельств напишет, и нормальным людям придётся на работе ипаттся с этим поделием? править и пересобирать модуль под несовместимые релизы ядра, и всё потому, что некий, назовём его М., не осилил ядерное abi?

anonymous
()
Ответ на: комментарий от robot12

Одного не пойму, НАФИГА это ?

Ну, может, чувак делает DRM с активацией для каждого компьютера по паспорту.

proud_anon ★★★★★
()
Ответ на: комментарий от robot12

Будет привязываться к железу и сигналить лампочками при каждом его апгрейде, наверное.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.