昨天搞了很长时间的格式化minix文件系统,最后猛然想起linux本来就有格式化功能,一查果然有,巨汗!然后脑子不正常的想找个软件做成虚拟软盘再格式化,找着找着又猛然想起linux不用虚拟软盘,因为本来什么设备就都是设备,又巨汗!
好歹搞定了格式化,用我的读取程序测试一下居然系统魔数都不一样,看来是文件系统的版本问题,改了一下程序让他继续读取,发现果然有一些微小的差异,超级块的s_nzones(逻辑块总数)被设置为了2万多,有些没搞懂。
无意间发现了linus的格式化程序,复制下来看看能不能用,果然问题多多,改着改着Eclipse的CDT出了点问题,不报错也不生成binary文件了,没什么方向就网上查,发现有不少人这样,不过都没有解决。最后自己搞着搞着找到了问题,是因为头文件包括重叠,有一些结构定义混乱造成的(具体我也说不清,我就把一个结构的定义从stat.h搬到fs.h,一切就恢复正常了,神奇!)
好,可以运行linus的格式化程序了,费了不少周折,也有点收获。
PS:fwrite不是字节数,而是写入的记录个数。你可以参照下面的说明:
size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
fwrite returns the number of full items actually written, which may be less than count if an error occurs. Also, if an error occurs, the file-position indicator cannot be determined.