I took a look at implementation of FILE structure in newlib/libc/include/sys/reent.h (src distribution). It contains the field -offset: struct __sFILE { ... int _offset; /* current lseek offset */ ... }; Struct FILE typedef'ed as __sFILE. So, there exist two file offset references: one for streams, another for block I/O. I think, block I/O is based on WinAPI file I/O. Stream I/O should be built, in general, on block I/O level. And when you use lseek() the resulting file offset is not sinchronized with the file offset field in the respective stream structure (*stdin, in your case) because block I/O knows nothing about stream I/O. Regards, Micahel -----Original Message----- From: Earnie Boyd To: Michael V. Nikolaev ; cygwin users Date: 8 áåðåçíÿ 1999 ð. 21:45 Subject: Re: [bug] Crazy I/O. >---"Michael V. Nikolaev" wrote: >> >> >> -----Original Message----- >> From: Earnie Boyd >> To: cygwin users >> Date: 8 áåðåçíÿ 1999 ð. 18:46 >> Subject: [bug] Crazy I/O. >> >> >> Hi! >> >> You use stdin as a _stream_ when calling gets(). So, try to call >fseek(stdin, 0L, SEEK_SET) after the second dup2(). It should work. >> > >Didn't help. Besides, it shouldn't be needed. >== >- \\||// >-------------------o0O0--Earnie--0O0o------------------- >-- earnie_boyd@yahoo.com -- >-- http://www.freeyellow.com/members5/gw32/index.html -- >----------------------ooo0O--O0ooo---------------------- > >PS: Newbie's, you should visit my page. >_________________________________________________________ >DO YOU YAHOO!? >Get your free @yahoo.com address at http://mail.yahoo.com > KCB•Ø[È[œÝXœØܚX™Hœ›ÛH\È\ÝÃB”Ù[™HY\ÜØYÙHÈÞYÝÚ[‹][œÝXœØܚX™PÛÝ\˜Ù]Ø\™K˜ÞY۝\˘ÛÛCB