C言語 標準関数 | 応用 | サンプル

標準関数
構文
応用

管理人

プライバシーポリシー


書式

#include <stdio.h>

size_t fread( const void *adr , size_t len , size_t cnt
                                             , FILE *fp );

■戻り値:正常時はcnt、異常時はcntより小さい値を返す。

説明

アドレスadrから大きさlenのデータをcnt件、ファイルポインタfpから読み出す。

具体的には、構造体(とは限らないが)の先頭アドレスから構造体サイズlenをcnt件、ファイルポインタfpから読み出すと言い換えることも出来る。

本関数freadは通常、バイナリモード("rb"など)でオープンしたファイルポインタfpを指定することが多い。

正常時は件数cnt、失敗時は件数cntより小さい値を返す。

サンプル

#include <stdio.h>

/* 構造体の定義 */
typedef struct {
  char cdata[4];
  int idata;
} strOutData;

main() {

  strOutData out[3];
  int ret , cnt;
  FILE * fp;

  /* データを設定 */
  strncpy( out[0].cdata , "abc" , sizeof( out[0].cdata ));
  out[0].idata = 123;
  strncpy( out[1].cdata , "def" , sizeof( out[1].cdata ));
  out[1].idata = 456;
  strncpy( out[2].cdata , "ghi" , sizeof( out[2].cdata ));
  out[2].idata = 789;

  /* ファイルオープン(Windowsの場合は"out.dat") */
  fp = fopen( "./out.dat" , "wb" );
  if( fp == NULL ) {
    printf( "ファイルオープンエラー\n" );
    return -1;
  }

  /* データを出力 */
  /* 構造体の配列数を求める */
  cnt = sizeof( out )/sizeof( strOutData );
  ret = ( int )fwrite(( void * )out
               , sizeof( strOutData ) , cnt , fp );
  if( ret != cnt ) {
    printf( "ファイル出力エラー\n" );
    return -1;
  }

  /* ファイルクローズ */
  fclose( fp );

  /* データをクリア */
  memset(( void * )out , '\0' , sizeof( out ));

  /* ファイルオープン(Windowsの場合は"out.dat") */
  fp = fopen( "./out.dat" , "rb" );
  if( fp == NULL ) {
    printf( "ファイルオープンエラー\n" );
    return -1;
  }

  /* データを入力 */
  ret = fread(( void * )out
                   , sizeof( strOutData ) , cnt , fp );
  if( ret != cnt ) {
    printf( "ファイル入力エラー\n" );
    return -1;
  }

  /* ファイルクローズ */
  fclose( fp );

  /* 入力データを標準出力 */
  int i;
  for( i=0;i<cnt;i++ ) {
    printf( "out[%d].cdata=%s\n" , i , out[i].cdata );
    printf( "out[%d].idata=%d\n" , i , out[i].idata );
  }
}

実行結果

out[0].cdata=abc
out[0].idata=123
out[1].cdata=def
out[1].idata=456
out[2].cdata=ghi
out[2].idata=789


Copyright © 2008-2015 http://hitorilife.com All Rights Reserved.