我基本上是C的新手。
我有一个带有 64 GB RAM 和 240 GB SSD 的 64 位 Windows7。
我使用一个采集板,它将采集的数据存储在 2 个内部 FIFO 中,然后将数据传递到 RAM(因此我可以潜在地采集 60 GB 的数据)。
我不能做的是使用该fwrite
函数来编写一个大于 4 GB 的二进制文件。
这是我的变量:
static UINT64 *rbuffer12 = NULL;
static UINT64 *rbuffer34 = NULL;
FILE *fd_raw, *fd_raw2;
UINT64 nacq = 2000;
ICS1555_ULONG_T bufferLength12, bufferLength34;
因此,专注于 FIFO #1 中发生的事情,电路板nacq
获取大小bufferLength12
并使用指向的内存将所有内容存储在 RAM 中rbuffer12
。
bufferLength12 = 524288;
acq_length = 524288 / (channels_number * 2 * 4);
nBytes = bufferLength12 * 4;
rbuffer12 = (UINT64 *) malloc(nacq*nBytes);
memset(rbuffer12, 0, nacq*nBytes);
for (i = 0; i < 4*nacq; i++)
ReadF(h, 0, (UINT64 *) (rbuffer12 + i * bufferLength12/8), nBytes/4, NULL, 0))
现在我想将数据写入File12.bin
.
fd_raw=fopen("File12.bin","wb")
fwrite((UINT64 *) rbuffer12,8,(nacq * 4 * channels_number * acq_length) ,fd_raw);
fclose(fd_raw);
fd_raw=NULL;
当我设置nacq=2000
时,文件大小为 4'096'000 字节。如果我试图增加这个值,程序就会挂起,如果我退出采集,我会得到一个二进制文件,例如,1'960'000 字节的尺寸。
我怎样才能有一个更大的二进制文件?