Mac анализирует диск на наличие свободных секторов - PullRequest
1 голос
/ 12 октября 2011

Мне нужно прочитать сектора жесткого диска.В частности, я пытаюсь написать функцию следующим образом:

findFreeBlocks - анализировать структуры диска и находить два непрерывных свободных блока заданной длины.

int findFreeBlocks (char * drivePath, DWORDectorsNeeded, u_int64_t * freeSector1, u_int64_t * freeSector2)

Параметры: [IN] drivePath - путь к логическому диску [IN] секторамNeeded - длина необходимойсвободный блок в секторах (сектор = 512 байт) [OUT] freeSector1 - первый сектор первого найденного свободного блока [OUT] freeSector2 - первый сектор второго найденного свободного блока

Return: 0 - в случае успеха, код ошибки - если ошибка

Может кто-нибудь указать мне API, которые помогут мне сделать это?У меня есть опыт работы с Objective-C, но C / C ++ тоже может работать (и я предполагаю, что так будет, поскольку это очень низкий уровень).Спасибо

1 Ответ

1 голос
/ 12 октября 2011

Как указывает @PlasmaHH, операционная система, такая как MacOS, не собирается предлагать вам Objective C или C ++ API для работы с секторами и дорожками на физическом диске. (Это также не позволит вам изменить скорость двигателя внутри привода или переместить головку привода в центр или за пределы пластин.)

Если вы хотите написать «низкоуровневый» код, такой как дефрагментатор или аналогичный, вы должны будете знать, с какой файловой системой вы работаете. По умолчанию Mac HFS + не имеет много инструментов с открытым исходным кодом для работы с ним. Есть некоторые заметки о структурах:

http://developer.apple.com/library/mac/#technotes/tn/tn1150.html

... существует инструмент под названием hfsdebug, который устарел в пользу fileXray:

http://osxbook.com/software/hfsdebug/

(Тем не менее, нет исходного кода для этого. Тот, кто претендует на звание педагога, все же отправляет свою книгу «Mac OS / X Internals» с инструментом с закрытым исходным кодом, говорит о многом [каламбур] о культуре Разработка Apple. Удручает то, что я действительно мог заработать деньги, написав книгу под названием «Mac OS / X Internals Internals».)

Короче говоря: если вы хотите связываться с файловой системой, вы застрянете в работе с необработанным вводом-выводом на блочном устройстве в /dev/rdisk*. Там нет библиотеки. Это почти наверняка не стоит вашего времени, вместо этого сделайте что-нибудь классное с Linux. :)

...