動作しているかなり大きなコマンドラインアプリの真ん中で。バッファリングできるよりも大きいファイルを処理するためにいくつかの変更を行い、から奇妙な結果が発生しましたfread
。
DebugLog(@"Reading %d samples of a total %d samples of size %d, leaving %d samples remaining", numSamplesToRead, numSamplesInFile, sizeof(short) * channels * scaleFactor, numSamplesRemainingInFile);
DebugLog(@"Position in file is %d", ftell(in));
items = fread(dataBuffer, sizeof(short) * channels * scaleFactor, numSamplesToRead, in);
DebugLog(@"%d samples read", items);
DebugLog(@"Position in file is %d", ftell(in));
これにより、次の出力が得られます。
<main:(604)> Reading 29278208 samples of a total 115202048 samples of size 8, leaving 85923840 samples remaining
<main:(605)> Position in file is 512
<main:(607)> 448 samples read
<main:(608)> Position in file is 58560512
(問題のファイルのサイズは225008Kです。)
では、どうすればそれぞれ8バイトの448サンプルのみを読み取り、位置512から位置58560512に移動できますか?要求された量のデータが読み取られないのはなぜですか?