How to skip getchar in C?


 
Thread Tools Search this Thread
Top Forums Programming How to skip getchar in C?
# 1  
Old 10-01-2010
How to skip getchar in C?

Hi,
I would like to read an input from keyboard using getchar. However, if no input (No Carriage return/new line none whatsoever) is given after say, 5 seconds, I would like to skip the getchar and move on. How do I do this in C. I'm using GNU compiler set.


Thanks,
# 2  
Old 10-01-2010
You can't do this with getchar(), you'll have to use read() instead. More details in a bit.

---------- Post updated at 03:31 PM ---------- Previous update was at 03:19 PM ----------

This should timeout at 5 seconds. The timeout happens in the terminal itself.

Code:
#include <stdio.h>
#include <unistd.h>

int main(void)
{
        int c;
        // Save sane TTY settings
        system("stty -g > ~/.stty-save");
        // Set TTY timeout of 50 tenths of a second, minimum read size 0
        system("stty -icanon min 0 time 50");

        while(read(STDIN_FILENO, &c, 1) == 1)
        {
                fprintf(stderr, "read 1 bytes\n");
        }

        // Restore sane tty settings
        system("stty $(cat ~/.stty-save)");
        return(0);
}

This User Gave Thanks to Corona688 For This Post:
# 3  
Old 10-02-2010
Be sure to check your man page for termios. termios has tcgetattr and tcsetattr to perform terminal settings from within C.

Last edited by jim mcnamara; 10-02-2010 at 11:12 AM..
# 4  
Old 10-04-2010
Quote:
Originally Posted by Corona688
You can't do this with getchar(), you'll have to use read() instead. More details in a bit.

---------- Post updated at 03:31 PM ---------- Previous update was at 03:19 PM ----------

This should timeout at 5 seconds. The timeout happens in the terminal itself.

Code:
#include <stdio.h>
#include <unistd.h>

int main(void)
{
        int c;
        // Save sane TTY settings
        system("stty -g > ~/.stty-save");
        // Set TTY timeout of 50 tenths of a second, minimum read size 0
        system("stty -icanon min 0 time 50");

        while(read(STDIN_FILENO, &c, 1) == 1)
        {
                fprintf(stderr, "read 1 bytes\n");
        }

        // Restore sane tty settings
        system("stty $(cat ~/.stty-save)");
        return(0);
}


Thanks man. I use "select" it works but the problem is I'm unable to flush my input stream. How do I do that?
# 5  
Old 10-04-2010
Quote:
Originally Posted by cprogdude
I'm unable to flush my input stream. How do I do that?
I'm not quite sure of your meaning. Discard existing input? Won't read() do that?
# 6  
Old 10-04-2010
I have never used it, but does setting the non-blocking flag on stdin work?

Code:
int ctrlflags;
ctrlflags = fcntl(stdin, F_GETFL);
ctrlflags |= O_NONBLOCK;
fcntl(stdin, F_SETFL, ctrlflags);

If so, then you can loop on that until you get something.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Skip first and last line

Hi All I have a sample file like below: 012312112 1372422843 1236712 1372422843 1275127 3109301010 from which I wan't to: 1.)delete... (10 Replies)
Discussion started by: swasid
10 Replies

2. Programming

What is the difference between printf and putchar() or scanf and getchar() ?

Im a newbie to programming language, i found tat there r these function called printf and putchar() as well as scanf and getchar(), im curious abt why do dey hav these 2 different function although dey r doing the same instruction? :confused: (13 Replies)
Discussion started by: kris26
13 Replies

3. UNIX for Advanced & Expert Users

Skip files in use

Hi all, i'm trying to configure a script that will find and gzip the searched files, this is easy enough, find /var/log/myfolder/*.log -type f -mtime +1 -exec gzip {} \; cd /var/log/myfolder/ mv *gz myzipped_folder/ but what it would be very handy is to skip the files in use,because tomcat... (13 Replies)
Discussion started by: charli1
13 Replies

4. Programming

How to kill disowned process which calls getchar() in code

Hi, What happens to process state when getchar() is called? I wrote a C code in which I call getchar() somewhere down the road. I forgot about that, I started the process, put it in bg and disowned it using "disown". Now, how do I see where that process has gone/how do kill it? Thanks, Amrut (1 Reply)
Discussion started by: 17amrut29
1 Replies

5. Programming

Help on getchar

I wanted to make a simple program that writes chracters in a file but i didnt want to press enter .So i found the getchar which doesnt need enter.If i pass (int) getchar to putc ,in the file it shows a P character.The (int) getchar says it is equal to1734747216 so i do (int) getchar-1734747216... (4 Replies)
Discussion started by: fireblast
4 Replies

6. Shell Programming and Scripting

go to / skip in script

Hi all I have some script like this #!/bin/bash mv /tmp/file1 tmp/file2 if ] ; then cp /tmp/filetest/ tmp/file3 if ] then echo "succes" else echo "failed" fi else echo "failed" fi i didn't try to see if it's work, the thing is that i don't care if... (4 Replies)
Discussion started by: naamas03
4 Replies

7. Shell Programming and Scripting

Bash replacement to getchar

There's a replacement in bash for getchar or get functions of C and C++?Those functions read the next char avaliable in the input stream. I've tried something like: OLD_STTY=`stty -g` stty cbreak -echo look=`dd if=/dev/tty bs=1 count=1 2>/dev/null` stty $OLD_STTY But it is not working... (3 Replies)
Discussion started by: Asafe
3 Replies

8. Shell Programming and Scripting

Skip new line

Hi, how can I skip the new line of echo? In SH!!!! echo "the date is :" date and result I want is the date is : Tue Oct 11 22:24:37 WEST 2005 I've already tried including the \c inside the echo, but it didn't work. Thanks! (2 Replies)
Discussion started by: pmpx
2 Replies

9. BSD

FreeBSD skip UserConfig...

When I boot FreeBSD from cd/floppy, it skips the UserConfig program. I have no idea why! And if I skip this step, my hardware won't work. ( I already tried...) Can anyone help me with this??? (2 Replies)
Discussion started by: Enoch Chan
2 Replies

10. UNIX for Dummies Questions & Answers

getchar()

hey everyone! got another problem here. how would i use the getchar() in a prompt: Press any key to continue the way i did it was to define a char variable named ch and then wrotechar ch ... ch = getchar(); printf("Press any key to continue"); getchar():if you press enter it exits, but... (2 Replies)
Discussion started by: primal
2 Replies
Login or Register to Ask a Question