Russian Qt Forum
Сентябрь 30, 2024, 18:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Как используя Qt узнать какие существуют диски и их разделы в linux?  (Прочитано 17849 раз)
Silentium
Гость
« Ответ #15 : Август 02, 2012, 11:47 »

Абсолютная ваша правда, если программа предполагает, что все уже смонтированно. Иначе мы возвращаемся к /proc/partition fdisk, ну или парсить директорию /dev. Но как ее парсить если сборщик определил имена дисков не как стандартные sd??, а по другому ?
Ты много видел систем, где именуется не по стандарту? Да и /proc/partition fdisk не покажет usb, cdrom, floppy.

Цитировать
В директории /dev могут быть все возможные устройства, а не только подключенные на данный момент.
Через тот же udev можно удалить устройство из /dev.
Код:
Вывод с моего /proc/partitions
8        0  732574584 sda
   8        1          1 sda1
   8        5  341991657 sda5
   8        6  390580281 sda6
   8       16  976761527 sdb
   8       17  976760001 sdb1
   8       32  244198584 sdc
   8       33     104391 sdc1
   8       34    1028160 sdc2
   8       35  102406342 sdc3
   8       36  140657107 sdc4
  11        0    1048575 sr0
   8       48    7831552 sdd
   8       49    7830528 sdd1
sdd -это флешка, sr0 -cdrom - не то ни другое не подмантированно fd0 у меня нет просто нет устройства
На фре если не изменилось ничего было hda - на жесткие
Записан
andrew.k
Гость
« Ответ #16 : Август 02, 2012, 13:54 »

Абсолютная ваша правда, если программа предполагает, что все уже смонтированно. Иначе мы возвращаемся к /proc/partition fdisk, ну или парсить директорию /dev. Но как ее парсить если сборщик определил имена дисков не как стандартные sd??, а по другому ?
Ты много видел систем, где именуется не по стандарту? Да и /proc/partition fdisk не покажет usb, cdrom, floppy.
usb еще как покажет, почему нет?
cdrom, floppy это отдельная песня.

Цитировать
В директории /dev могут быть все возможные устройства, а не только подключенные на данный момент.
Через тот же udev можно удалить устройство из /dev.
А если нет udev? да и зачем удалять? Раз система насоздавала, значит она по-другому не умеет.
Записан
DmitryM
Гость
« Ответ #17 : Август 02, 2012, 14:22 »

А если нет udev?
А что вместо udev в Linux, devfs/hotplug?

да и зачем удалять? Раз система насоздавала, значит она по-другому не умеет.
Все она умеет. У меня Gnome удаляет устройство из /dev при размонтирования флешки.
Записан
andrew.k
Гость
« Ответ #18 : Август 02, 2012, 14:48 »

А если нет udev?
А что вместо udev в Linux, devfs/hotplug?
хотплаг

да и зачем удалять? Раз система насоздавала, значит она по-другому не умеет.
Все она умеет. У меня Gnome удаляет устройство из /dev при размонтирования флешки.
А у меня не умеет, у меня МСВС Улыбающийся
Записан
DmitryM
Гость
« Ответ #19 : Август 02, 2012, 15:06 »

А у меня не умеет, у меня МСВС Улыбающийся
Ненавижу MCBC за ld-linux.so.1
Когда сертифицируют ядро 2.6 появиться udev Подмигивающий
Записан
andrew.k
Гость
« Ответ #20 : Август 02, 2012, 15:11 »

А у меня не умеет, у меня МСВС Улыбающийся
Ненавижу MCBC за ld-linux.so.1
Когда сертифицируют ядро 2.6 появиться udev Подмигивающий
К тому времени, когда сертифицируют, 2.6 уже будет как сейчас 2.4 Улыбающийся
Записан
Silentium
Гость
« Ответ #21 : Август 02, 2012, 17:06 »

у меня тут получилось что то в этом роде, единственное, я выбираю только не смонтированные устройства
Код:
void QMount_Widget::get_devices(QStringList *devices_name){
    QFile       file;
    QTextStream stream(&file);
    QString     buffer;
    QStringList buffer_list;
    file.setFileName("/proc/partitions");
    if(file.open(QIODevice::Text|QIODevice::ReadOnly)){
        buffer=stream.readAll();
        file.close();
    }
    buffer_list=buffer.split(QRegExp("\\W+\\d+"),QString::SkipEmptyParts);
    buffer_list.removeFirst();
    buffer.clear();
    for(int i=0;i<buffer_list.count();i++)
        buffer+=buffer_list.at(i);
    buffer.remove(QRegExp("[a-z]{3}\\s"));
    buffer_list=buffer.split(QRegExp("\\s+"),QString::SkipEmptyParts);
    for(int i=0;i<buffer_list.count();i++){
        buffer_list[i]="/dev/"+buffer_list.at(i);
        devices_name->append(buffer_list.at(i));
    }
    buffer.clear();
    buffer_list.clear();
    file.setFileName("/etc/mtab");
    if(file.open(QIODevice::Text|QIODevice::ReadOnly)){
        buffer=stream.readAll();
        file.close();
    }
    int lastpos=0,number_item=0,count_items;
    count_items=buffer.count(QRegExp("\/dev\/[a-z]{2,3}\\d"));
    for(int i=0;i<count_items;i++){
        lastpos=buffer.indexOf(QRegExp("\/dev\/[a-z]{2,3}\\d"),lastpos);
        number_item=buffer.indexOf(" ",lastpos)-lastpos;
        buffer_list.append(buffer.mid(lastpos,number_item));
        lastpos+=number_item;
    }
    for(int i=0;i<buffer_list.count();i++)
        devices_name->removeAt(devices_name->indexOf(buffer_list.at(i)));
    for(int i=0;i<devices_name->count();i++) qDebug()<<devices_name->at(i);
}
Записан
andrew.k
Гость
« Ответ #22 : Август 02, 2012, 17:21 »

у меня тут получилось что то в этом роде, единственное, я выбираю только не смонтированные устройства
Зачем ты используешь QTextStream, если то же самое можно сделать с помощью QFile?
file.readAll()
Записан
Silentium
Гость
« Ответ #23 : Август 02, 2012, 20:47 »

у меня тут получилось что то в этом роде, единственное, я выбираю только не смонтированные устройства
Зачем ты используешь QTextStream, если то же самое можно сделать с помощью QFile?
file.readAll()
Привычка, как первый раз пример просмотрел в документации, так и использую. как то даже не задумывлся что без него можно использовать. Спасибо учту на будущее
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.08 секунд. Запросов: 18.