On Thursday 16 April 2009 21:03:52 Tobias Rehbein wrote: > Am Tue, Apr 14, 2009 at 09:07:26PM +0200 schrieb Mel Flynn: > > On Tuesday 14 April 2009 20:13:00 Tobias Rehbein wrote: > > > I'm having a little trouble solving a specific problem in C. I want to > > > write a filter which reads data from stdin. After reading the user > > > should be able to interact with the program via stdin. > > > > Just open(2) /dev/tty. If tty is invalid, then you don't have to expect a > > user either. > > Thanks for this hint. I tried to implement an example. Good someone take a > look at it and tell me if I did it right. Well, at least it works... > > The code is here: > > http://gist.github.com/95320
It is really much simpler, see below for code: % cat tty.c | ./tty 1: #include <stdio.h> 1: #include <err.h> <snip> Hello! 2: Hello! quit (Don't focus on the 80char linebuf, I just know for this example I don't need more). /dev/tty is the "controlling terminal input". Stdin is the standard input, which is either the receiving end of a pipe/redirection or the controlling terminal in it's absence. > To avoid further spamming of the freebsd-questions mailing list: Could > someone point me to a good place to ask C programming questions? O'Reilly has a few good titles (Practical C programming is a good primer, followed by Algorithms with C), other then that, comp.lang.c newsgroup. -- Mel #include <stdio.h> #include <err.h> int main(int argc, char **argv) { FILE *tty; char linebuf[80]; while( fgets(linebuf, sizeof(linebuf), stdin) ) printf("1: %s", linebuf); if( (tty = fopen("/dev/tty", "r")) == NULL ) errx(0, "Running non-interactively. See ya!"); while( fgets(linebuf, sizeof(linebuf), tty) ) { if( strcmp(linebuf, "quit\n") == 0 ) break; printf("2: %s", linebuf); } return 0; } _______________________________________________ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"