Re: [GD-General] OT: Checking if any chars available on stdin under Windows
Brought to you by:
vexxed72
|
From: Mark W. <ma...@aw...> - 2004-04-23 15:15:10
|
I use the _read() function in VC to do this
eg:
decode.cpp:
------------
#include <io.h>
void main(){for (unsigned char
ch=0,i=0;_read(0,&ch,1);i=(i<<1)+ch)if((ch-='0')>1){_write(1,&i,1);i=ch=0;}_
write(1,&i,1);}
A 2-liner to convert a string of binary 1's and 0's into ASCII:
eg:
echo 01000001 01000010 01000011 | decode.exe
Hope that helps!
Mark Webster
----- Original Message -----
From: "Colin Fahey" <cp...@ea...>
To: <gam...@li...>
Sent: Friday, April 23, 2004 3:31 PM
Subject: [GD-General] OT: Checking if any chars available on stdin under
Windows
>
> 2004 April 22nd
> Friday
>
> Off-Topic question here...but I just spent an hour doing Google
> searching and reading other online documentation, and I'm not
> finding any answers to the following:
>
> QUESTION: How can I check if stdin (standard input) has any
> characters available for reading under WINDOWS (not Linux)?
>
> I thought (cin.rdbuf()->in_avail()) would be the cool hacked
> solution -- but even after doing Sleep(1000), cin.sync_with_stdio(),
> and wackier and wackier things to try to make "cin" up-to-date,
> so to speak, the expression above ALWAYS yields zero, whether or
> not there are characters available on the input stream.
> (Compiled using Visual C++ 6.0 under Windows 2000)
>
> If I have a command line like the following:
>
> testapp
>
> then the following code blocks indefinitely:
>
> int c = cin.peek();
>
> but if the command line is as follows:
>
> more textfile.txt | testapp
>
> then the application does not block. But in both
> cases (cin.rdbuf()->in_avail()) is zero.
>
> How can "testapp" in the two command line examples
> above DETECT which scenario (piped input or not) is
> involved? That, I guess, is my real goal. I want to
> know if the command line lacks the piping from
> another app, since this means I shouldn't wait
> forever for stdin data.
>
> I'd be willing to use a Win32 function to solve this
> problem, but if it is really tricky, like creating a
> thread, or something nutty, then it's probably not
> worth it. Bleah, under Linux one can actually use
> fnctl() to change stdin to non-blocking mode (but,
> I assume, still buffered), which makes this problem
> go away -- but no fnctl() under Windows.
>
> Anyhow, probably avoiding piping data through stdin
> is the REAL solution to all of this mess, but that
> decision is not mine to make.
>
> --- Colin
>
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: The Robotic Monkeys at ThinkGeek
> For a limited time only, get FREE Ground shipping on all orders of $35
> or more. Hurry up and shop folks, this offer expires April 30th!
> http://www.thinkgeek.com/freeshipping/?cpg=12297
> _______________________________________________
> Gamedevlists-general mailing list
> Gam...@li...
> https://lists.sourceforge.net/lists/listinfo/gamedevlists-general
> Archives:
> http://sourceforge.net/mailarchive/forum.php?forum_id=557
>
>
|