この質問に既に投稿されているように、C - fwrite binary file large than 4GB 4 GB を超えるバイナリ ファイルを書き込む必要があります。最初の回答で学んだように、私は を複数回呼び出すコードを開発することにしましたfwrite
。
bufferLength12 = bufferLenght34 = 524288
私の取得ボードには、ディメンションがバイトの 2 つの FIFO があります。各 FIFO メモリは異なるチャネルにリンクされているため、取得を開始すると、異なるチャネルからのデータが両方に含まれています。
4*nacq
それらのFIFOから複数の読み取りを行いたいとしましょう。また、取得のサイクルごとに異なるポインターを使用したいと考えています。
だから私はこの方法でメモリを割り当てました:
v12 = (UINT64 *) calloc ( bufferLength12 , 4*nacq);
v34 = (UINT64 *) calloc ( bufferLength34 , 4*nacq);
次に、取得が開始され、データを RAM に保存するために、取得サイクルごとに異なるポインターを渡す必要があります。
私はこの方法でポインターに cicle を作成します。
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
ます。
どんな助けでも大歓迎です!