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の倍数です.