我需要阅读硬盘扇区。具体来说,我正在尝试编写如下函数:
findFreeBlocks - 分析磁盘结构并找到两个不间断的 给定长度的自由块。
int findFreeBlocks(char * drivePath,DWORD sectorsNeeded,u_int64_t * freeSector1,u_int64_t * freeSector2)
参数:[IN] drivePath - 逻辑驱动器的路径[IN] sectorNeeded - 扇区中所需空闲块的长度(扇区= 512 bytes)[OUT] freeSector1 - 第一个发现免费的扇区 block [OUT] freeSector2 - 第二个发现的第一个扇区是免费的 块
返回:0 - 如果成功,错误代码 - 如果错误
有人能指出我会帮助我做到这一点的API吗?我有Objective-c的经验,但C / C ++也可以工作(我猜它会是因为这是非常低的水平)。感谢
答案 0 :(得分:1)
正如@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*
在块设备上处理原始IO的问题。没有图书馆。这几乎肯定不值得你花时间去用Linux做一些很酷的事情。 :)