我即将在C中进行一些数据处理,处理部分在逻辑上工作,但我遇到了一个奇怪的文件问题。我方便地考虑32位数字,所以我需要一个32位0的文件,然后如果有限域中存在某些东西,我会将0改为1。
我的问题是:在C中创建所有“0”的文件的最佳方法是什么?
我目前正在做的事情,似乎有道理但不起作用。我目前正在做以下事情,它不会停留在2.4GiB标记处。我不知道什么是错的,或者是否有更好的方法。
#include <stdlib.h>
#include <stdio.h>
typedef uint8_t u8;
typedef uint32_t u32;
int main (int argc, char **argv) {
u32 l_counter32 = 0;
u8 l_ubyte = 0;
FILE *f_data;
f_data = fopen("file.data", "wb+");
if (f_data == NULL) {
printf("file error\n");
return(0);
}
for (l_counter32 = 0; l_counter32 <= 0xfffffffe; l_counter32++) {
fwrite(&l_ubyte, sizeof(l_ubyte), 1, f_data);
}
fwrite(&l_ubyte, sizeof(l_ubyte), 1, f_data); //final byte at 0xffffffff
fclose(f_data);
}
我将循环中的计数器递增为0xFFFFFFFe,这样它就不会回绕并永远运行..我还没有等待它实际停止,我只是通过ls -alF继续检查磁盘当它大于2.4GiB时,我会停止它。我检查了sizeof(l_ubyte),它确实是8位。
我觉得我必须错过一些平凡的细节。
答案 0 :(得分:4)
使用truncate()/ftruncate()
创建使用零(别名\ 0空字节)的文件初始化的更快方法。见man page here
答案 1 :(得分:4)
你正在计算0xffffffff
,等于4,294,967,295。对于2 GB的数据,您最多可以计算0x80000000
。