我需要一种方法来填充带有零的驱动器上的剩余可用磁盘空间(零空闲速度,以便虚拟硬盘不占用无用数据的空间)。
我想要速度,因为要填充的空间可以是几GB大,我需要使用最小的内存占用,因为这将用于" vintage" (想想486用4MB RAM)环境。
我正在考虑使用fopen
创建一个文件并用fwrite
填充零,最后删除该文件,但它似乎不是最佳...
我不习惯使用遗物编译器(Borland Turbo C 2.01)编写纯C和我。这只是一个有趣的项目,可以更好地理解C,同时为我的文件MS-DOS(虚拟)环境创建一个小实用程序。
你能否告诉我是否有比使用fwrite
更好的方法来实现这一目标?
这是我的代码到目前为止的样子(未经测试):
m = malloc(buffSize);
if (!m) {
return -4;
}
f = fopen(tempFilename, "wb");
if (!f) {
free(m);
return -5;
}
i = buffSize;
while (i--) {
m[i] = 0;
}
written = buffSize;
while (written) {
written = fwrite(m, buffSize, 1, f);
}
fclose(f);
free(m);
答案 0 :(得分:1)
fwrite
可能是写东西的最快方法。确保使用足够大的全零缓冲区(例如至少32K字节)。您可以使用memset
清除该缓冲区(或较旧的非标准bzero
),也可以使用calloc
代替malloc
进行分配。
但是,您的Borland Turbo C不是一个非常好的C标准兼容编译器。
为什么不切换到更新的编译器和操作系统(例如最新的Linux和最近的GCC)?
答案 1 :(得分:1)
试试这个(未经测试的)
f = fopen(tempFilename, "wb");
fseek(f, buffSize-1, SEEK_SET);
fputc(0, fp);
fclose(f);