Portál AbcLinuxu, 31. května 2024 16:40


Dotaz: C++ zoznam diskov a mainboard

hermes avatar 1.11.2021 21:02 hermes | skóre: 6 | blog: Elektro | BA
C++ zoznam diskov a mainboard
Přečteno: 342×
Odpovědět | Admin
Ahojte ako v C++ (alebo za pomoci nejakého systémového súboru, alebo command line toolu, ktorý zavolám / prečítam z C++) zistím zoznam všetkých diskov (ktoré sa nachádzajú v PC?) disky by mali obsahovať aj názov vrátane výrobcu disku, velkosť atď... Ak treba kludne by to môže fungovať aj cez roota.

A to isté platí aj pre základnú dosku:

V pciconf -lv som našiel pripojenie pre SSD disky, či už NVMe, alebo aj SATA, ale samotné disky už nie.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.11.2021 21:52 darebak
Rozbalit Rozbalit vše Re: C++ zoznam diskov a mainboard
Odpovědět | | Sbalit | Link | Blokovat | Admin
fdisk -l
Jendа avatar 1.11.2021 22:12 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: C++ zoznam diskov a mainboard
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já používám smartctl -a i pro zjištění ne-SMART informací (model, sériové číslo…). To musíš pustit na všechny disky, buď bych enumeroval očekávané soubory (/dev/sd* a /dev/nvme*) nebo lsblk (což mi teda vypisuje i síťové NBD disky, kde se výrobce dozvíš těžko; ale všiml jsem si, že to ukazuje major a minor device number, tak z toho by asi šlo zjistit že tě zajímá jenom SATA a NVMe). (jo a ještě jsou SD karty v /dev/mmcblk*, pokud to je čtečka co neemuluje mass storage)
Já to s tou denacifikací Slovenska myslel vážně.
xkucf03 avatar 1.11.2021 23:24 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše KInfoCenter, Solid, UDisks2, D-Bus, /sys
Odpovědět | | Sbalit | Link | Blokovat | Admin

Koukni např. na zdrojáky aplikace KInfoCeter – je tam modul zobrazující disky a ten používá knihovnu Solid. Můžeš se napojit na ni nebo se podívat dovnitř a udělat to podobně. Tuším, že se tam používá knihovna UDisks2 – ta má taky nějaké API, na které by ses mohl napojit.

Další možnost je jít na to přes D-Bus, což je generické API, díky kterému můžeš mít trochu volnější vazbu a nelinkovat přímo na ty konkrétní knihovny. Ale stejně se ve výsledku napojíš na ten Udisk2. Spusť si třeba qdbusviewer a proklikej si na záložce System Bus, co tam všechno je – ne jen disky, ale všechno možné a není to jen pro čtení, dají se tím i volat metody a ty věci různě konfigurovat nebo na nich vyvolávat nějaké akce, případně poslouchat události (tzn. je to něco jako SNMP nebo JMX v Javě).

A pak můžeš taky číst ze souborového systému:

cat '/sys/dev/block/8:0/device/model'

kde vyčteš název/model disku a další věci. Výhoda je, že nepotřebuješ žádné knihovny a jen traverzuješ po adresářích a souborech, takže ti stačí čisté C++. Ale zase to bude fungovat jen na systému s jádrem Linux.

Záleží na tobě, kolik abstrakcí a knihoven tam chceš mít, jak moc obecné a multiplatformní to má být, nebo jestli to píšeš jen pro GNU/Linux – pak bych asi klidně četl z těch souborů v /sys.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
2.11.2021 09:21 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: C++ zoznam diskov a mainboard
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokiaľ ide len o inventarizáciu fyzických diskov, tak napr.
sudo lshw -class disk
Či to pokryje aj napr. iSCSI alebo FC alebo iné enterprise som na notebooku nesledoval.

Pri logických sa to skomplikuje lebo kadejaké loopbacky pre snapy, cryptsetupy, LVM, next gen FS (BTRFS, ZFS) alebo Clustered multinode FS.
hermes avatar 2.11.2021 12:10 hermes | skóre: 6 | blog: Elektro | BA
Rozbalit Rozbalit vše Re: C++ zoznam diskov a mainboard
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ďakujem Vám všetkým za odpovede :) vyskúšam

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.