How do you do non-blocking console I/O on Linux in C?

I want to add an example:

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main(int argc, char const *argv[]) {
    char buf[20];
    fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK);
    int numRead = read(0, buf, 4);
    if (numRead > 0) {
        printf("You said: %s", buf);

When you run this program you have 4 seconds to provide input to standard in. If no input found, it will return.

2 sample executions:

$ ./a.out
You said: fda
$ ./a.out

Leave a Comment