|
Home > Archive > Unix Programming > May 2006 > reading stdin with SELECT?
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
reading stdin with SELECT?
|
|
| ifmusic@gmail.com 2006-05-16, 1:16 pm |
| Hi!, i have a "server-like" application:
i use select to accept and recieve data from Sockets.
I want to Add a menu to this app something like "pick an option" thing,
but it has to show data according to data recieved from Sockets..
I found a way to do it with Fork, i mean, First i fork;in the Child i
do all the menu stuff and in the "else" part (the parent part) i have
the rest (the while(1) with a select inside). But i dont like this
because, i don't like forking just for a menu! and i have to create a
socket to communicate with the parent.
i was thinking.. isn't it possible to tell the select to read and show
the stdin, after all, it's a FD.
I tried this but i couldn't get it to work correctly, i ran into
trouble like "recv cant read from a Non-socket fd" "i read the stdin
with "read" but i reads char by char -i guess- and it remains "ready"
so select, keeps selecting stdin forever.
so, i don't know which is THE way to do it correcly if there is such a
thing.
Thanks.
| |
| noogie.brown@gmail.com 2006-05-16, 7:15 pm |
|
ifmusic@gmail.com wrote:
> Hi!, i have a "server-like" application:
> i use select to accept and recieve data from Sockets.
> I want to Add a menu to this app something like "pick an option" thing,
> but it has to show data according to data recieved from Sockets..
>
> I found a way to do it with Fork, i mean, First i fork;in the Child i
> do all the menu stuff and in the "else" part (the parent part) i have
> the rest (the while(1) with a select inside). But i dont like this
> because, i don't like forking just for a menu! and i have to create a
> socket to communicate with the parent.
>
> i was thinking.. isn't it possible to tell the select to read and show
> the stdin, after all, it's a FD.
> I tried this but i couldn't get it to work correctly, i ran into
> trouble like "recv cant read from a Non-socket fd" "i read the stdin
> with "read" but i reads char by char -i guess- and it remains "ready"
> so select, keeps selecting stdin forever.
>
> so, i don't know which is THE way to do it correcly if there is such a
> thing.
>
> Thanks.
This shouldn't be too much of a problem.
Heres a bit of code from something I wrote which could handle that if
fdin was set to stdin.
struct timeval tv = {0,0};
FD_ZERO(&fdset);
FD_SET(fdin,&fdset);
if(select(fdin+1,&fdset,0,0,&tv)>0) {
if(FD_ISSET(fdin,&fdset)) {
i = read(fdin,stdinbuf,STDINBUFSIZE);
if(i>0)
//successful read
len += i;
else
//end of stream or error
}
}
}
If you can't get it working post a bit of code.
| |
| ifmusic@gmail.com 2006-05-17, 1:21 am |
| jajajajajj!
yes! it works, i had done that befere But when i asked if the FD which
is ready was Stdin i wrote: "if (i=0) .....read......" INSTEAD of "if
(i == 0 ) ...." Simple STUPIDITY .
Thanks !
|
|
|
|
|