c++Как посекторно читать разные разделы?
для чтения надо:open(partition_name, flag );
где partition_name, скажем — "/dev/hda5".
Вопрос в том, откуда это самое partition_name взять?
Т.е надо установить соответствие информации из MBR, где все разделы перечислены, с их именами в linux.statfs насколько я вижу такой инфы не дает, к тому же встает вопрос как
читать не смонтированнные разделы.
>c++
>
>Как посекторно читать разные разделы?
>для чтения надо:
>
>open(partition_name, flag );
>
>где partition_name, скажем — "/dev/hda5".
>
>Вопрос в том, откуда это самое partition_name взять?Взять исходные тексты fdisk и посмотреть, как он обрабатывает mbr.
>Т.е надо установить соответствие информации из MBR, где все разделы перечислены, с
>их именами в linux.По-моему, всё достаточно прозрачно для :
hda1,hda2,hda3,hda4 - первый, второй, третий, четверный (соотвественно) primary раздел устройства hda. Информация хранится в mbr.
hda5, hda6, ... - расширенные разделы. Информация хранится в расширенной таблице, адрес расположения которой узнается из mbr.>
>statfs насколько я вижу такой инфы не дает, к тому же встает
>вопрос как
>читать не смонтированнные разделы.
Хочешь программку дам, которая из MBR всю инфу о разделах (основных и логических) устройства выгребает? Нужно только имя устройства указать, например /dev/hda. Если надо - пиши в мыло.
>Вопрос в том, откуда это самое partition_name взять?
>Т.е надо установить соответствие информации из MBR, где все разделы перечислены, с
>их именами в linux.загляни в /proc/partitions
Для того, чтобы разобраться с партициями из программы, можно пойти простым путём: читать /proc/partitions, как описано выше.
Можно сделать честнее:
Нужно прочесть MBR с диска. Это первые 512 байт устройства /dev/hda (к примеру).
Но для того, чтобы получить информацию о разделах, нужно знать тип MBR: MS-DOS, Sparc и т.п.
В зависимости от типа MBR информация о разделах хранится по разному. Тип MBR определяется из magic number. Для MS-DOS это последние 2 байта MBR: 0xAA55.
Более подробную информацию молжно найти в google.
Кстати говоря, если MBR типа MS-DOS, то в там хранится информация только о 4-х первычных разделах. Об остальных разделах информация хранится во во второй части загрузчика. Она вроде бы, если не ошибаюсь, лежит в адреса 0x8000. НО в этом не уверен и размер её не помню.
>c++
>
>Как посекторно читать разные разделы?
>для чтения надо:
>
>open(partition_name, flag );
>
>где partition_name, скажем — "/dev/hda5".
>
>Вопрос в том, откуда это самое partition_name взять?
>Т.е надо установить соответствие информации из MBR, где все разделы перечислены, с их >именами в linux.
>
>statfs насколько я вижу такой инфы не дает, к тому же встает вопрос как
>читать не смонтированнные разделы.
Да, что касается соответствия: всё линейно. 1 раздел в MBR - цифирь 1 (скажем /dev/hda1) и т.п.