From owner-FreeBSD-users-jp@jp.freebsd.org  Mon Oct  2 16:40:29 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id QAA57471;
	Mon, 2 Oct 2000 16:40:29 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from atlas-is.co.jp (dns1.atlas-is.co.jp [210.230.230.66])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id QAA57464
	for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 2 Oct 2000 16:40:28 +0900 (JST)
	(envelope-from endo@atlas-is.co.jp)
Received: from kitahama.atlas-is.co.jp (emerald.atlas-is.co.jp [192.168.11.1])
	by atlas-is.co.jp (8.8.8+2.7Wbeta7/3.6W-uucp) with ESMTP id QAA07321
	for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 2 Oct 2000 16:39:52 +0900 (JST)
Received: from aquamarineN.atlas-is.co.jp ([192.168.11.12])
	by kitahama.atlas-is.co.jp (8.8.8+2.7Wbeta7/3.6W-uucp) with SMTP id QAA00931
	for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 2 Oct 2000 16:39:55 +0900 (JST)
Message-Id: <200010020739.AA00810@aquamarineN.atlas-is.co.jp>
From: endo@atlas-is.co.jp (=?ISO-2022-JP?B?GyRCMXNGIyEhPVNNNRsoQg==?=)
Date: Mon, 02 Oct 2000 16:39:54 +0900
To: FreeBSD-users-jp@jp.freebsd.org
In-Reply-To: <20000929191524F.simokawa@sat.t.u-tokyo.ac.jp>
References: <20000929191524F.simokawa@sat.t.u-tokyo.ac.jp>
MIME-Version: 1.0
X-Mailer: AL-Mail32 Version 1.10
Content-Type: text/plain; charset=iso-2022-jp
Reply-To: FreeBSD-users-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: FreeBSD-users-jp 55744
Subject: [FreeBSD-users-jp 55744] Re: read buffer size
 =?ISO-2022-JP?B?GyRCJE5KUTk5GyhC?= 
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org
X-Originator: endo@atlas-is.co.jp

$B$($s$I$&!w$a$C$7$e!J$=$&$$$($P!"$3$&=q$/M=Dj$G$7$?(B^^;$B!K$G$9!#(B

$BCY$/$J$C$F$7$^$$$^$7$?$,!"$*JV;v$"$j$,$H$&$4$6$$$^$7$?!#(B
$BIO<e$J%F%9%H$G$9$,!"$d$C$F$_$?%W%m%0%i%`$r=*$o$j$KIU$1$^$9!#(B
$BE,Ev$K:n$C$?$N$G%l%3!<%I$,FI$_9~$a$F$J$$$H$+$N$D$C$3$_$OL5(B
$B$7$G$9!#(B^^;$BJ70O5$$,EA$o$l$P!#!#!#(B
$B$G!"7k2L$G$9$,!"$$$m$$$m;n$7$?Lu$8$c$J$$$N$GK\Ev$+$I$&$+J,(B
$B$+$j$^$;$s$,!"<+J,$G%P%C%U%!%j%s%0$7$?$N$h$j$b(B OS $B$K$d$C$F(B
$B$b$i$C$?J}$,B.$+$C$?$G$9!#(B^^;
$B:n$jJ}$,0-$$$s$G$7$g$&$M$'!#(B

Hidetoshi Shimokawa $B$5$s$O=q$-$^$7$?!#(B
>$B<+J,$G(B buffering $B$7$F$bNI$$$H$O;W$$$^$9$,(B.
>$B$=$3$=$3Bg$-$J(B ($B$G$b?t(BGB$B$h$j>.$5$$(B) file $B$K(B access $B$9$k$N$G$"$l$P(B,
>mmap $B$7$F$7$^$C$F(B madvice$B$H$+$G9)IW$9$l$P(B,
>$B$H;w$?$h$&$J$3$H$r<j7Z$K<B8=$G$-$k$H;W$$$^$9(B.
>128 byte $B$4$H$K(B read syscall $B$rH/9T$9$k$h$j$+$O8zN($,NI$$$G$7$g$&(B.

$B$3$l$C$F!"$I$&$d$k$s$G$7$g$&$+!)(B

Takashi SHIRAI $B$5$s$O=q$-$^$7$?!#(B
>$B!!BP>]$,(B storage $B$G$"$k>l9g!"(Bsector size $B0J>e$N(B buffer $B$,$"(B
>$B$C$?$H$3$m$G(B sequencial $B$KFI=q$-$7$F$$$kJ,$K$O(B setbuf() $BE*$J(B
>buffer $B$N8z2L$O$J$$$G$7$g$&!#7k6IF,$+$i$*?,$^$G0lDL$j$J$a$F(B

$B$"!"$=$&$J$s$G$9$+!#(B
$BJ*M}E*$J@)Ls$,=P$F$/$k$s$G$9$M!#(B

>FILE $B9=B$BN$r2p$9$k(B overhead $B$,L5$/$J$kJ,B.$/$J$k$G$7$g$&!#(B
>$B!!C"$7!"(Bsequencial $B$J(B access $B$7$+$7$J$$>l9g$O$d$O$j8zN(2=$N(B
>$B8z2L$OM>$j4|BT=PMh$^$;$s$,!#(B

$B$J$k$[$I!#$3$N<j$,$"$j$^$9$+!#(B
$B$G$b!"$"$^$j!V$r!"$`$C$A$cB.$/$J$C$?$J$!!W$H$O;W$($=$&$K$J$$(B
$B$G$9$M!#(B

>$B!t!!$=$7$F(B DBMS $B$O(B raw device $B$r;H$&$h$&$K$J$k$H!#$3$C$+$i@h(B
>$B!t$O:#(B fj.linux $B$G(B flame $B2=$7$F$^$9$J(B :-)

$B$3$3$^$G$OMW5a$7$^$;$s!#(B^^;

$B$3$3$+$i;n$7$?%F%9%H%W%m%0%i%`$G$9!#(B
$B$48!>Z$N$[$I$r!#!#!#!#(B

<nonbuf.c>
#include <stdio.h>

main()
{
  FILE *fp;
  char buf[256];

  if ( (fp = fopen("test.dat", "r")) == NULL ) {
    printf("file open error\n");
    exit(0);
  }
  while(fread(buf, 128, 1, fp));

  fclose(fp);
}

<buf.c>
#include <stdio.h>

static char readbuf[5000000];

int xfread( char *buf, int buflen, int reclen, FILE *fp)
{
  static recnum = -1;
  static recmax = 0;
  int retnum = 0;

  if ( recnum == -1 ) {
    recmax = sizeof(readbuf) / (buflen * reclen );
    fread( readbuf, recmax * (buflen * reclen ), 1, fp );
    recnum = 0;
  }
  if ( recmax <= recnum ) {
    recnum = -1;
    return 0;
  }

  memcpy( buf, &readbuf[recnum * buflen * reclen], buflen*reclen );
  if ( ++recnum >= recmax )
  {
    recnum = 0;
    if ( feof(fp) ) return 0;
    fread( readbuf, recmax * (buflen * reclen ), 1, fp );
  }
  return buflen * reclen;
}

main()
{
  FILE *fp;
  char buf[256];

  if ( (fp = fopen("test.dat", "r")) == NULL ) {
    printf("file open error\n");
    exit(0);
  }
  while(xfread(buf, 128, 1, fp));

  fclose(fp);
}
