正如已经在这个问题中发布的C - fwrite 二进制文件大于 4GB我需要编写一个大于 4GB 的二进制文件。从第一个答案中了解到,我决定开发我的代码,多次调用fwrite
.
bufferLength12 = bufferLenght34 = 524288
我的采集板有 2 个字节大小的 FIFO 。每个 FIFO 存储器都与不同的通道链接,因此当我开始采集时,它们中的数据都来自不同的通道。
我想4*nacq
从这些 FIFO 中进行多次读取。我想为每个采集周期使用不同的指针。
所以我以这种方式分配了内存:
v12 = (UINT64 *) calloc ( bufferLength12 , 4*nacq);
v34 = (UINT64 *) calloc ( bufferLength34 , 4*nacq);
然后采集开始,对于每个采集周期,我应该传递一个不同的指针,以便将数据存储在 RAM 中。
我以这种方式在指针上画了一个圆圈:
for ( p=v12,q=v34 ; p<v12+4*nacq && q<v34+4*nacq; p++,q++) {
ReadF(h, 0, (UINT64 *) p , bufferLength12 , NULL, 0);
ReadF(h, 1, (UINT64 *) q , bufferLength34 , NULL, 0); }
然后我尝试将数据从 RAM 写入二进制文件:
for ( p=v12,q=v34 ; p<v12+4*nacq && q<v34+4*nacq; p++,q++) {
fwrite( (UINT64 *) p, 8 , bufferLength12 , fd12);
fwrite( (UINT64 *) q, 8 , bufferLength34 , fd34);
}
fclose(fd12);
fd12=NULL;
fclose(fd34);
fd34=NULL;
如果我运行代码,我会得到一个比实际采集长度大得多的二进制文件大小。所以我认为指针没有被正确初始化。
如果我绘制获取的数据(只是噪声),我可以看到很多 0 值,因为使用calloc
.
任何帮助将不胜感激!