URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 409
[ Назад ]

Исходное сообщение
"Программирование устройств"

Отправлено Мишалыч , 17-Янв-02 02:22 
Необходимо считывать:
-сектора с устройств (винт, флоп магнитооптика)
-информацию об устройстве типа кол-во дорожек, голов, секторов, байт на сектор и т.д.
как это сделать не вкурсе.

Содержание

Сообщения в этом обсуждении
"RE: Программирование устройств"
Отправлено uncle Bob , 04-Фев-02 13:32 
>Необходимо считывать:
> -сектора с устройств (винт, флоп
>магнитооптика)
> -информацию об устройстве типа кол-во
>дорожек, голов, секторов, байт на
>сектор и т.д.
>как это сделать не вкурсе.


#include <stdio.h>
#include <fcntl.h>
#include <linux/hdreg.h>

int main()
{
    struct hd_driveid hd;
    int ide;

    ide=open("/dev/hda",O_RDONLY);
    ioctl(ide,HDIO_GET_IDENTITY,&hd);
    printf("\nphysical cyls - %d\nphysical heads - %d\nphysical sectors per track - %d\n",
    hd.cyls,hd.heads,hd.sectors);
    printf("\nModel - %s\n\n",hd.model);
    return 1;
}


Посмотри linux/hdreg.h.
Там есть структура hd_driveid, в которой после вызова  ioctl будет собрана вся информация о твоем винчестере.

Насчет считывания секторов - пока еще сам не пробовал, в том же hdreg.h надо еще порыться, там в самом начале расписаны то ли порты, то ли регистры контроллера диска. Надо будет найти какой-нибудь живой пример, типа hdparm.
Как вариант - изучить ide.c.
Если что не понятно - пиши на ubob@mail.ru. Постараюсь помочь.

Удачи.

uncle Bob