Date: Thu, 2 Nov 1995 17:39:44 +0200 (IST) From: Eli Zaretskii To: Justen Keven Marshall Cc: djgpp AT sun DOT soe DOT clarkson DOT edu Subject: Re: CR/LF pairs... NO NO NO! On 2 Nov 1995, Justen Keven Marshall wrote: > I am at my wits end trying to print a line-feed > without a carriage return. (Or the other way around.) > What happens is that when I try to print char(10) in > a file, with printf redirected, fprintf, cout, putchar, > fputchar, or whatever, it puts BOTH not just one. DOS C compilers treat text and binary files differently. When writing to a text file, a CR is produced for every LF, so that you could port programs which print like this: printf("Hello, world!\n"); and expect a CR-LF pair to be written, as required for DOS text files. Any given file is treated as text or binary according to how it was open. The default is TEXT, so that if you say `fp = fopen("file", "w")', it is open as a text file. This is again for portability reasons, because Unix programs don't know about the difference. To open a file in binary mode, just add "b" to the flags you pass to fopen(), like this: FILE *fp = fopen("file", "wb"); or use O_BINARY, if you do the same with open(). If you want to switch an already open file to binary mode (like for stdin and stdout, which are open before your main() function runs), use the setmode() library function, like this: setmode(fileno(stdout), O_BINARY);