The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

*bsd* disk size - размер конкретного слайса в разделе (disk bsd ioctl)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: disk, bsd, ioctl,  (найти похожие документы)
- RU.UNIX (2:5077/15.22) -------------------------------------------- RU.UNIX - From : Aleksey Fedorov 2:5025/3.7 14 Apr 00 13:13:16 Subj : *bsd* disk size - размер конкретного слайса в разделе ------------------------------------------------------------------------------- Hello Andy! At 13 Apr 00 14:16:28, Andy Igoshin wrote to All: [...] AF>> ioctl DIOCGDINFO возвращает struct disklabel. Если надо посмотреть AF>> размер конкретного слайса в разделе, то ioctl'у нужно подсовывать имя AF>> раздела а не слайса и уже в struct disklabel искать что надо. Это AF>> работает даже с псевдоустройствами vn. Единственное что требуется - это AF>> чтобы на устройстве был записан disklabel. AI> Леш, ты сам это делал, или в теории? Я видел как это сделано в системе amass. У них там кеш в raw разделе. AI> Я прежде чем в конфу писать уже получил AI> по этому ioctl disklabel. Он _всегда_ возвращает _весь_ disklabel диска AI> подсунь ему раздел или диск. Без какого-либо указания что именно подсунуто AI> раздел или диск (или я такового указания не нашел). Hужно сделать fstat. Из него можно узнать номер слайса. AI> Как делают сами fbsd'шники я уже сюда написал. Вот пример: >===== Start cut [partsize.c] =====< int get_part_size(int fd) { struct disklabel disklab; struct stat statbuf; int ret; int partno; int size; if (fstat ( fd, &statbuf)==-1) { printf("Fstat failed; %s\n",strerror(errno)); } if (! S_ISCHR (statbuf.st_mode )) { printf("Not char special device\n"); return 0; } if ((ret = ioctl(fd,(int) DIOCGDINFO, &disklab)) == -1) { printf("Ioctl to read cache partition size failed; %s", strerror(errno)); return 0; } if ( disklab.d_magic != DISKMAGIC || disklab.d_npartitions > MAXPARTITIONS ) { printf("Bad disklabel\n"); return 0; } partno = statbuf.st_rdev & 0x7; size = disklab.d_partitions[partno].p_size; return size; } >===== End cut [partsize.c] =====< Размер естественно в блоках. --- QDed alpha v3.57pl9.1g / FreeBSD / COMPAQ Proliant 1850R * Origin: Воронежсвязьинформ ISP (2:5025/3.7)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру