2回連続してfreadエラーとfread戻り値を使用
5329 ワード
今日は1つのコードを書いています.1フレームのbufferをファイルに読み込むには、NEONとOpenCLの2つの異なる実装があるので、ファイルを2回読み込む必要があります.コードは以下の通りです.
1 FILE *file;
2 int i = 0;
3 INTER_BLOCK_SIZE_GPU_RS *block_size;
4 file = fopen(name, "rb");
5 if (file == NULL) {
6 LOGE("Can't open file: %s
", name);
7 return ;
8 }
9 // LOGI("file open OK:%s",name);
10 #if USE_OCL
11 LOGI("read pool buffer");
12 int readCount=0;
13 for(i=0;i<50;++i){
14 readCount=fread(rs_obj.buffer_pool_map_ptr, rs_obj.buffer_pool_size,1, file);
15 LOGI("OCL read buffer pool count==%d",readCount);
16 if(readCount == 1)
17 break;
18 }
19
20 #if USE_NEON
21 for(i=0;i<50;++i){
22 readCount=fread(rs_obj.pool, rs_obj.buffer_pool_size,1, file);
23 LOGI("NEON read[%d] buffer pool count==%d",i,readCount);
24
25 if(readCount == 1)
26 break;
27
28 }
29 LOGI(" ");
30 #endif
前のファイルの読み取りに成功し、後から50回連続でファイルの読み取りに失敗したことがわかりました.どうして知らなかったの?
その後、C言語のファイル読み取りのポインタFILE*fileを発見し、このポインタをコンパイルすることでファイルの内容を読み取り、1つのテキストを読み終わったとき、fileはファイルの末尾に着いたことを指し、C言語出力入力ポインタは確かに共通している.
2回目のfreadでは0を返し、2回目のfreadを実行する前にコードを付けるだけです.
fseek(file, 0, SEEK_SET);できます.問題が解決する.
またsize_について説明しますt fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
で返されるのは実際に読み取ったcount数で、この数は何個のsizeを指しますか.例:
1つのファイルには4つのcharの文字があります:1,2,3,4
count = fread(rs_obj.buffer_pool_map_ptr, 1,sizeof(int), file); 4を返します.
count =fread(rs_obj.buffer_pool_map_ptr, sizeof(int), 1, file); 1を返します
だから実際に読み取ったのはsizeの倍数です.