X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f From: "Rod Pemberton" Newsgroups: comp.os.msdos.djgpp Subject: setmode Date: Thu, 2 Apr 2009 19:02:06 -0400 Organization: Aioe.org NNTP Server Lines: 46 Message-ID: NNTP-Posting-Host: pldq+kT97bAAp/ObDwnZyQ.user.aioe.org X-Complaints-To: abuse AT aioe DOT org NNTP-Posting-Date: Thu, 2 Apr 2009 22:58:42 +0000 (UTC) X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1933 X-Notice: Filtered by postfilter v. 0.7.7 X-Newsreader: Microsoft Outlook Express 6.00.2800.1933 Cancel-Lock: sha1:rzs7tSvvzqFliTLJZoKYr/2Q4pk= X-Priority: 3 X-MSMail-Priority: Normal To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Ok, I have a program which normally outputs to a file as binary. I'd like to optionally output to stdout when no output file is specified. However, stdout is in text mode. Therefore, when the output of the program is redirected to a file from the DOS command line an extra ASCII CR 0x0D is being inserted into the file's saved output for every newline, i.e., 0x0D 0x0D 0x0A instead of 0x0D 0x0A. The following setmode() line corrects the problem, but it isn't ANSI C: setmode(fileno(stdout), O_BINARY); First, is there an equivalent to this in ANSI C? Second, shouldn't I be able to do the exactly same as the setmode() line with ANSI C's freopen()? I.e., if I freopen() stdout as "wb", shouldn't this be functionally identical? Third, if there isn't an ANSI C equivalent, is there a way to surrepticiously do the equivalent to that setmode line in DJGPP - which uses some combination of ANSI C functions? E.g., freopen() calls open() which then calls setmode(). So, shouldn't there be some way to do the same the setmode() line above using freopen()? So far, I've tried the following with freopen(): /* fails, captures extra CR when stdout redirected to file */ freopen(NULL,"wb",stdout); /* fails, sends to screen, but won't redirect from screen to file */ freopen("CON","wb",stdout); /* fails, sends to screen, but won't redirect from screen to file*/ freopen("/dev/tty","wb",stdout); /* fails, sends to file CONOUT$, not to screen */ freopen("CONOUT$","wb",stdout); /* fails, sends to file asdf, not to screen */ freopen("asdf","wb",stdout); How do I get both redirection capability and binary output with stdout when using ANSI C functions such as freopen()?... Rod Pemberton