Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
7 / 4 / 1
Регистрация: 03.05.2014
Сообщений: 82

Получить список жестких дисков

14.01.2018, 19:15. Показов 6530. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. Прошу не кидаться в меня гнилыми овощами и нецензурной бранью, я только учусь 😁

Пишу программу, которая будет выполнять определенные действия с жестким диском (именно физическим устройством, а не монтированным, логическим диском), выбрав его из всех подключенных к машине по его серийному номеру. Информацию о том, как получить серийник нашел, а вот как получить список устройств нет... Возможно я что то назвал не своими словами, поправьте если что.

Вобщем надо получить список имен устройств, к примеру:
/dev/sda
/dev/sdb
/dev/sdc
и т.д.

Гугл/яндекс не помогли, нашел решения, но они какие уж слишком замудренные, мне кажется тут все проще.

Какие варианты пришли мне в голову:
1) Я знаю что система обзывает устройства так, как я привел в примере выше, т.е. можно по сути просто подставляя буквы по алфавиту к "/dev/sd", проверять существует ли файл устройства, пока не узнаю послежнюю букву устройства. На сколько это вариант работоспособен? Не может ли получиться так, что файл существует, но устройства как бы и нету? Или может ли так случиться, что есть устройство с буквой a и есть с буквой c, а с буквой b нету?
2) При помощи команды ls можно получить список всех файлов устройств, но получить результат выполнения команды не так легко, как запустить ее из программы.

Посоветуете что нибудь?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.01.2018, 19:15
Ответы с готовыми решениями:

Список жестких дисков
Здраствуйте. Подскажите, как можно узнать сколько на компе жестких дисков(букв, типа C,D,E...), и записать ети буквы в КомбоБокс....

Список жёстких дисков с объёмами, одной строкой
Здравствуйте. Понимаю, что подобная тема уже была, я много гуглил, но у меня стоит немного другая задача, поэтому решил создать...

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

5
 Аватар для Старый воин
93 / 92 / 21
Регистрация: 16.08.2017
Сообщений: 188
Записей в блоге: 1
14.01.2018, 20:36
Лучший ответ Сообщение было отмечено Kapo как решение

Решение

Здравствуйте!
Вы с каким дистрибутивом работаете? Мне кажется, что там не буквами нумерация идет, а цифрами. sda1, sda2 ... и т.д. Да, проверил у себя (Rosa Linux), так и есть. А по поводу того, как эти номера распределяются, то современные системы их динамически присваивают. При загрузке все устройства определяются и для каждого файл создается. Кажется так. Если не так, то пусть меня поправят.
1
7 / 4 / 1
Регистрация: 03.05.2014
Сообщений: 82
14.01.2018, 20:55  [ТС]
Ubuntu 16.04

Забыл указать.

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

Т.е.:
/dev - каталог, в котором лежать файлы эти
sd - это система выберает по типу устройства, в зависимости от того, по которому оно подключено
буквы a-z - номер устройства
цифра - номер логического раздела

Добавлено через 8 минут
Тогда наверно мне подойдет мой первый вариант, надо только придумать как более "элегантно" перебирать файлы устройств. А то это sd меня пугает, боюсь что вдруг устройство начнет определяться по другому и уже будет не sd, а что то другое, хотя это наверно глупо.

Нашел вот такую вот штуку. Тот диск, который разбит на 6 разделов, это как раз мой жесткий диск и после символа "->" указан файл, который ему соответствует. Но это не в имени файла находится, а наверно прописано в самом файле... Открыть его ни чем не могу, автоматический поиск тоже результатов не дал. Как понять чем его открыть?

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
neo@zion:~$ dir /dev/disk/by-id -g
итого 0
lrwxrwxrwx 1 root  9 янв 14 20:28 ata-TSSTcorp_CDDVDW_SN-208DB_R8XW6YOD600185 -> ../../sr0
lrwxrwxrwx 1 root  9 янв 14 20:28 ata-WDC_WD5000LPCX-24C6HT0_WD-WXA1E945YLRW -> ../../sda
lrwxrwxrwx 1 root 10 янв 14 20:28 ata-WDC_WD5000LPCX-24C6HT0_WD-WXA1E945YLRW-part1 -> ../../sda1
lrwxrwxrwx 1 root 10 янв 14 20:28 ata-WDC_WD5000LPCX-24C6HT0_WD-WXA1E945YLRW-part2 -> ../../sda2
lrwxrwxrwx 1 root 10 янв 14 20:28 ata-WDC_WD5000LPCX-24C6HT0_WD-WXA1E945YLRW-part3 -> ../../sda3
lrwxrwxrwx 1 root 10 янв 14 20:28 ata-WDC_WD5000LPCX-24C6HT0_WD-WXA1E945YLRW-part4 -> ../../sda4
lrwxrwxrwx 1 root 10 янв 14 20:28 ata-WDC_WD5000LPCX-24C6HT0_WD-WXA1E945YLRW-part5 -> ../../sda5
lrwxrwxrwx 1 root 10 янв 14 20:28 ata-WDC_WD5000LPCX-24C6HT0_WD-WXA1E945YLRW-part6 -> ../../sda6
lrwxrwxrwx 1 root  9 янв 14 20:28 wwn-0x50014ee6b05de515 -> ../../sda
lrwxrwxrwx 1 root 10 янв 14 20:28 wwn-0x50014ee6b05de515-part1 -> ../../sda1
lrwxrwxrwx 1 root 10 янв 14 20:28 wwn-0x50014ee6b05de515-part2 -> ../../sda2
lrwxrwxrwx 1 root 10 янв 14 20:28 wwn-0x50014ee6b05de515-part3 -> ../../sda3
lrwxrwxrwx 1 root 10 янв 14 20:28 wwn-0x50014ee6b05de515-part4 -> ../../sda4
lrwxrwxrwx 1 root 10 янв 14 20:28 wwn-0x50014ee6b05de515-part5 -> ../../sda5
lrwxrwxrwx 1 root 10 янв 14 20:28 wwn-0x50014ee6b05de515-part6 -> ../../sda6
0
 Аватар для Старый воин
93 / 92 / 21
Регистрация: 16.08.2017
Сообщений: 188
Записей в блоге: 1
14.01.2018, 22:21
Про буквы. Там от типа устройства зависит. Кажется для SATA это буква a, для блочных устройств b, для символьных c. А цифра - номер раздела. Открыть файл не получается наверное потому, что для этого доступ суперпользователя (root) нужен. Если с его привилегиями программа будет работать (вопреки инстинкту самосохранения), то наверное все получиться. Может не библиотечными средствами (std::ifstrem), но системные вызовы (open() например) должны работать.
Но кажется проще по Вашему второму варианту действовать (может дольше и с большим количеством телодвижений). Можно в программе использовать функцию system() и перенаправлять вывод результатов выполнения команды в файл. Затем вся информация из файла уже извлекается обычным способом (парсинг) и можно использовать ее для своих целей. Так, по моему не надо получать права root (это безопасность).
1
7 / 4 / 1
Регистрация: 03.05.2014
Сообщений: 82
16.01.2018, 21:19  [ТС]
Нашел решение более близкое к первому варианту:
PowerShell
1
lsblk -n -p -P -S -o NAME,TYPE,MODEL,SERIAL
Эта команда (соответсвенно с этими параметрами) выводит список всех запоминающих устройств в виде строк с переменными, переменные соответсвенно те, что указаны в конце, это только те, которые нужны мне. По параметру TYPE можно как раз выбрать именно те, которые мне нужны (например у жесткого диска этот параметр равен "disk", а у ддисковода "ram") вывод команды конечно же легко перенаправляется в файл, но хочется сразу получить его, без файла, пытаюсь через QProcess, но ни че не получается, не могу достаточно понятное разъяснение этого зверя найти.
По поводу открытия этих файлов через su, ноль эмоций... Ну это не важно, потом как нибудь поизучаю, сейчас то уже нашел более подходящее решение

Если у кого есть ссылочка на хорошую статью о QProcess, подкиньте пожалуйста

Добавлено через 3 минуты
Вот такой вод вывод у вышеуказанной команды, может кому пригодится. Там можно просто уйму параметров вывести (указывать можно либо по умолчанию - несколько основных, либо все - их просто туча , или же как у меня - перечислить необходимые
PowerShell
1
2
NAME="/dev/sr0" TYPE="rom" MODEL="CDDVDW SN-208DB " SERIAL="R8XW6YOD600185"
NAME="/dev/sda" TYPE="disk" MODEL="WDC WD5000LPCX-2" SERIAL="WD-WXA1E945YLRW"
2
 Аватар для Старый воин
93 / 92 / 21
Регистрация: 16.08.2017
Сообщений: 188
Записей в блоге: 1
17.01.2018, 00:07
Kapo, спасибо за информацию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2018, 00:07
Помогаю со студенческими работами здесь

Получить список дисков
Есть функция DWORD WINAPI GetLogicalDrives(void) Делаю следующий вызов в событии Form1_Shown Drivers=GetLogicalDrives(); ...

Получить список смонтированных дисков
Как получить список дисков в системе (то есть d:, c:, k: и т.д.) через коммандную строку? Нужно узнать какая буква принадлежит только что...

Получить список физических дисков
Здравствуйте! Как можно получить список имен физических дисков в формате PhysicalDriveN, где N - номер диска?

Как получить список дисков?
Буду писать вопросы кому не впадлу ответте. 1.Как получить список дисков все(a,d,c,e)? 2.Как узнать какие диски есьть CDROM? 3.Как...

Как получить список дисков на удаленном компьютере?
Подскажите, как получить список дисков на удаленном компьютере через idFTP?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru