From: <ji...@ng...> - 2001-03-30 23:22:59
|
Earnie wrote: > > You can have the following code in a separate source/object and add the > object to the link step or just add the code to the main() source file. > Note: this also affects stdin, stdout and stderr. > > #include <stdlib.h> > _fmode = _O_BINARY; > This was just what I was looking for, but I can't get it to work. It just seems to have no effect at all. Also, _fmode and _O_Binary seem to be in fcntl.h, not stdlib.h ---- test code ---- #include <stdlib.h> #include <fcntl.h> int main(int argc, char **argv ) { char input[40]; _fmode = _O_BINARY; scanf ( "%s", input ); printf( "%s\n",input); } -------------- built as follows: gcc -o jello.exe -mno-cygwin jello.c ---- executed on NT jello < in > out --- in nga{jim}253: od -c in 0000000 a a a a a a 032 b b b b b b \n nga{jim}254: od -c out 0000000 a a a a a a \r \n As you can see, the windoz EOF isn't getting thru the scanf, and printf is adding \r. What am I missing here? Jim |
From: <dan...@ya...> - 2001-03-31 00:13:58
|
--- Jim Roy <ji...@ng...> wrote: > Earnie wrote: > > > > You can have the following code in a separate source/object and add the > > object to the link step or just add the code to the main() source file. > > Note: this also affects stdin, stdout and stderr. > > > I believe that stdin, stdoout, stderr are open in text mode by default, regardless of _fmode. May need to explicity set mode if redirecting from std streams: Try this: #include <stdlib.h> #include <fcntl.h> unsigned int _fmode = _O_BINARY; int main(int argc, char **argv ) { char input[40]; _setmode( _fileno( stdin ), _O_BINARY ); _setmode( _fileno( stdout ), _O_BINARY ); scanf ( "%s", input ); printf( "%s\n",input); } _____________________________________________________________________________ http://my.yahoo.com.au - My Yahoo! - Have news, stocks, weather, sports and more in one place. |
From: Paul S. <pa...@is...> - 2001-04-01 00:32:05
|
Hello Danny, Danny Smith <dan...@ya...> wrote on Saturday, March 31, 2001: DS> --- Jim Roy <ji...@ng...> wrote: > Earnie wrote: >> > >> > You can have the following code in a separate source/object and add the >> > object to the link step or just add the code to the main() source file. >> > Note: this also affects stdin, stdout and stderr. >> > >> DS> I believe that stdin, stdoout, stderr are open in text mode by default, DS> regardless of _fmode. Any idea to consider this a bug and work it around? ;-) I remember how I messed with it. There really should be a way to pass some option to gcc (let it be -lbinmode) and get binary-clean app. DS> May need to explicity set mode if redirecting from std DS> streams: [] -- Paul Sokolovsky, IT Specialist http://www.brainbench.com/transcript.jsp?pid=11135 |
From: Earnie B. <ear...@ya...> - 2001-04-02 12:36:32
|
Danny Smith wrote: > > --- Jim Roy <ji...@ng...> wrote: > Earnie wrote: > > > > > > You can have the following code in a separate source/object and add the > > > object to the link step or just add the code to the main() source file. > > > Note: this also affects stdin, stdout and stderr. > > > > > > I believe that stdin, stdoout, stderr are open in text mode by default, > regardless of _fmode. There is an explicit warning in my VC5 reference manual that stdin, stdout and stderr are affected by this. Earnie. _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com |
From: <dan...@ya...> - 2001-04-02 23:02:42
|
--- Earnie Boyd <ear...@ya...> wrote: > Danny Smith wrote: > > > > --- Jim Roy <ji...@ng...> wrote: > Earnie wrote: > > > > > > > > You can have the following code in a separate source/object and add the > > > > object to the link step or just add the code to the main() source file. > > > > Note: this also affects stdin, stdout and stderr. > > > > > > > > > I believe that stdin, stdoout, stderr are open in text mode by default, > > regardless of _fmode. > > There is an explicit warning in my VC5 reference manual that stdin, > stdout and stderr are affected by this. > > Earnie. > > On my system, they aren't. The moral: Don't believe everything the Marquis de Soft says. Do believe everything the Marquis de Soft does. Danny _____________________________________________________________________________ http://my.yahoo.com.au - My Yahoo! - Have news, stocks, weather, sports and more in one place. |
From: Earnie B. <ear...@ya...> - 2001-04-02 12:34:54
|
Jim Roy wrote: > > Earnie wrote: > > > > You can have the following code in a separate source/object and add the > > object to the link step or just add the code to the main() source file. > > Note: this also affects stdin, stdout and stderr. > > > > #include <stdlib.h> > > _fmode = _O_BINARY; > > > > This was just what I was looking for, but I can't get it to work. > It just seems to have no effect at all. > Also, _fmode and _O_Binary seem to be in fcntl.h, not stdlib.h > Oh, yes, I forgot that. > ---- test code ---- > > #include <stdlib.h> > #include <fcntl.h> > > int main(int argc, char **argv ) > { > char input[40]; > _fmode = _O_BINARY; ^^^^^^^^^^^^^^^^^^^ This needs to be in the global space before main. > > scanf ( "%s", input ); > printf( "%s\n",input); > > > } > > -------------- built as follows: > > gcc -o jello.exe -mno-cygwin jello.c > > ---- executed on NT > > jello < in > out > > --- in > > nga{jim}253: od -c in > 0000000 a a a a a a 032 b b b b b b \n > > nga{jim}254: od -c out > 0000000 a a a a a a \r \n > > As you can see, the windoz EOF isn't getting thru the scanf, > and printf is adding \r. > What am I missing here? > Try the following. I haven't tested this particular code but I've done it before. #include <stdlib.h> #include <fcntl.h> _fmode = _O_BINARY; int main(int argc, char **argv ) { char input[40]; scanf ( "%s", input ); printf( "%s\n",input); } YMMV, Earnie. _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com |