l i n u x - u s e r s - g r o u p - o f - d a v i s
Next Meeting:
October 20: Web Application Hacking: How to Make and Break Security on the Web
Next Installfest:
Latest News:
Oct. 10: LUGOD Installfests coming again soon
Page last updated:
2003 Mar 04 08:21

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] file and keyboard input stream in C
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] file and keyboard input stream in C

Peter Jay Salzman wrote:

> i have code that reads from stdin via getchar().  i'd like to use the
> program by redirecting a text file to its stdin:
>    ./a.out < myfile.txt
> after it does its stuff, i'd like use stdin from a keyboard (after it
> processes the data from myfile.txt it displays the data using ncurses
> and requires input from me using the ncurses input functions).

The function dup() will allow you to close stdin and open it
again from the keyboard using /dev/tty.
Here is a demonstration program:

#include <sys/types.h>
#include <stdio.h>
#include <fcntl.h>

int main( int argc, char **argv )
        char input_buffer[ 1024 ];
        int file_descriptor;

        if ( fgets( input_buffer, 1023, stdin ) )
                printf( "got from stdin = %s\n", input_buffer );

        close( 0 );
        file_descriptor = open( "/dev/tty", O_RDONLY );
        dup( file_descriptor );

        if ( fgets( input_buffer, 1023, stdin ) )
                printf( "got from stdin = %s\n", input_buffer );

Test it with:
$ echo test | a.out

After you're finished with stdin, close it with close( 0 ). (Every
gets three open file descriptors, 0 = stdin, 1 = stdout, 2 = stderr.)
Then open /dev/tty and assign it to stdin via the dup() function. The
dup() function copies an open file descriptor to the first available
file descriptor slot starting at zero -- in this case slot zero because
of the close( 0 ) call.

> unfortunately, i can't use the ncurses input functions.  presumably
> because stdin is attached to a file instead of the keyboard.
> how can i reattach stdin back to the keyboard?
> pete
> --
> First they ignore you, then they laugh at you, then they fight you,
> then you win. -- Gandhi, being prophetic about Linux.
> Fingerprint: B9F1 6CF3 47C4 7CD8 D33E 70A9 A3B9 1945 67EA 951D
> _______________________________________________
> vox-tech mailing list
> vox-tech@lists.lugod.org
> http://lists.lugod.org/mailman/listinfo/vox-tech

vox-tech mailing list

LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
Appahost Applications
For a significant contribution towards our projector, and a generous donation to allow us to continue meeting at the Davis Library.