
@group
#define _GNU_SOURCE 1
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/select.h>
@end group

@group
int
input_timeout (int filedes, unsigned int seconds)
@{
  fd_set set;
  struct timeval timeout;
@end group

  /* @r{Initialize the file descriptor set.} */
  FD_ZERO (&set);
  FD_SET (filedes, &set);

  /* @r{Initialize the timeout data structure.} */
  timeout.tv_sec = seconds;
  timeout.tv_usec = 0;

@group
  /* @r{@code{select} returns 0 if timeout, 1 if input available, -1 if error.} */
  return TEMP_FAILURE_RETRY (select (FD_SETSIZE,
                                     &set, NULL, NULL,
                                     &timeout));
@}
@end group

@group
int
main (void)
@{
  fprintf (stderr, "select returned %d.\n",
           input_timeout (STDIN_FILENO, 5));
  return 0;
@}
@end group
