Основная идея та же - вы запускаете инструмент Linux через QProcess
и анализируете результат.Вот простой набросок:
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
#include <usb.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QProcess devList;
devList.start("lsblk", QStringList() << "-o" << "KNAME");
if (!devList.waitForStarted())
return false;
if (!devList.waitForFinished())
return false;
QString result = QString(devList.readAll());
qDebug() << result;
return a.exec();
}
Вы можете использовать любую другую команду siutable (ее довольно легко найти), и, конечно, она должна улучшить синтаксический анализ, но в целом все одинаково.
AFAIK, точки монтирования могут быть получены из /proc/mounts
с чем-то вроде ...
#include <QCoreApplication>
#include <mntent.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
struct mntent *ent;
FILE *aFile;
aFile = setmntent("/proc/mounts", "r");
if (aFile == NULL) {
perror("setmntent");
exit(1);
}
while (NULL != (ent = getmntent(aFile))) {
printf("%s %s\n", ent->mnt_fsname, ent->mnt_dir);
}
endmntent(aFile);
return a.exec();
}
Лучше, чем cat
запуск или что-то еще, также взятые из некоторого фрагмента и должны бытьулучшенный.И, наконец, в случае, если вам понадобится информация об устройстве в USD, это может быть что-то вроде ...
#include <QCoreApplication>
#include <usb.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
struct usb_bus *bus;
struct usb_device *dev;
usb_init();
usb_find_busses();
usb_find_devices();
for (bus = usb_busses; bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
printf("Trying device %s/%s\n", bus->dirname, dev->filename);
printf("\tID_VENDOR = 0x%04x\n", dev->descriptor.idVendor);
printf("\tID_PRODUCT = 0x%04x\n", dev->descriptor.idProduct);
}
}
return a.exec();
}
Это требует sudo apt-get libusb-dev
+ компиляции с -lusb
.
Нена самом деле большая часть Qt в проблеме и более фундаментальные «кодирующие» решения возможны, но, надеюсь, это даст вам толчок к подходящему решению.