From: Erik Max Francis Newsgroups: comp.os.msdos.djgpp Subject: Re: Problems with fread and fwrite Date: Wed, 01 Oct 1997 09:38:12 -0700 Organization: Alcyone Systems Lines: 49 Message-ID: <34327C74.12C26F0D@alcyone.com> References: <60tlf0$7d3$1 AT loki DOT cf DOT ac DOT uk> NNTP-Posting-Host: newton.alcyone.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk Emyr James wrote: > I am trying to get djgpp to do a raw memory dump to a file. I wrote > the following > small program to output 1000 double float variables. The file produced > should be > exactly 8000 bytes long. However, the program produces files with > lengths that vary > each time but are typically 8020 bytes long. Needless to say, > replacing the fwrite > to an fread to read in the file produces garbage. What is going on ?? > Is there another way of doing it ? When you get back written results that aren't what you expect, it usually means that the stream is opened in text mode, not binary mode. Instead of file = fopen("filename", "w"); use file = fopen("filename", "wb"); This is a standard ANSI C question, and doesn't have specifically to do with DJGPP. > I tried the program with gcc 2.6.3 on a Sun workstation and that works > ok (i.e > output files are 8000 bytes long and can be read in to give meaningful > values). > HELP!!!! This is consistent with the problem I describe above, because on Unix systems the logical newline (LF) is the same as the physical newline (LF), whereas on DOS systems the physical newline is CR LF. If you intend to be reading and writing binary data, not text, then always open the file in binary mode, or else you'll be guaranteed to run into problems on systems where the logical and physical newlines differ (e.g., DOS, Windows, Macintosh). -- Erik Max Francis, &tSftDotIotE / mailto:max AT alcyone DOT com Alcyone Systems / http://www.alcyone.com/max/ San Jose, California, United States / icbm://+37.20.07/-121.53.38 \ "After each war there is a little / less democracy to save." / Brooks Atkinson