questions about a backup program for the MS-DOS environment

Marshall Cline cline at cheetah.ece.clarkson.edu
Fri May 4 03:06:11 AEST 1990


In article <2484 at dataio.Data-IO.COM> bright at Data-IO.COM (Walter Bright) writes:
>In article <12459 at wpi.wpi.edu> jhallen at wpi.wpi.edu (Joseph H Allen) writes:
>>In article <1990Apr25.125806.20450 at druid.uucp> darcy at druid.UUCP (D'Arcy J.M. Cain) writes:
>>>In article <255 at uecok.UUCP> dcrow at uecok (David Crow -- ECU Student) writes:
>>>>      - possibly a faster copying scheme.  the following is the
>>>>         code I am using to copy from one file to another:
>>>>            do
>>>>            {  n = fread(buf, sizeof(char), MAXBUF, infile);
>>>>               fwrite(buf, sizeof(char), n, outfile);
>>>>            } while (n == MAXBUF);        /* where MAXBUF = 7500 */
>>>Try:
>>>     while ((n = fread(buf, sizeof(char), BUFSIZ, infile)) != 0)
>>>		fwrite(buf, sizeof(char), n, outfile);
>>>
>>>By using BUFSIZ instead of your own buffer length you get a buffer size
>>>equal to what the fread and fwrite routines use.  
>>No, no, no Yuck!  Don't use the C functions, and don't use such tiny buffers.
>>(no wonder it's so slow :-) Try (in small or tiny model):
>>	[asm example deleted]
>There is no point in going to asm to get high speed file copies. Since it
>is inherently disk-bound, there is no sense (unless tiny code size is
>the goal). Here's a C version that you'll find is as fast as any asm code
>for files larger than a few bytes (the trick is to use large disk buffers):
[example deleted]

Note that Walter used read()/write() as opposed to fread()/fwrite().
In Turbo-C, it's even faster (probably 2 to 3 times faster!) to use
_read() and _write(), since read()/write() can end up
deleting/inserting ^J if the files are in text mode.

I found fread()/fwrite() in Turbo-C to be embarassingly & surprisingly
slow.  After tracing them, I found they resolved to loops of
fgetc()/fputc() rather than the seemingly more obvious read()/write(),
apparently since fgetc()/fputc() know about buffering.  However it
wouldn't be hard to fix fread()/fwrite() to do it `right'!

Marshall
--
===============================================================================
Marshall Cline/ECE Department/Clarkson University/Potsdam NY 13676/315-268-3868
 cline at sun.soe.clarkson.edu, bitnet: BH0W at CLUTX, uunet!clutx.clarkson.edu!bh0w
  Career search in progress: ECE faculty. Research oriented. Will send vita.
===============================================================================



More information about the Comp.lang.c mailing list