0

この質問に既に投稿されているように、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ます。

ここに画像の説明を入力

どんな助けでも大歓迎です!

4

1 に答える 1