[ale] re: timeout for read
Geoffrey Myers
geof at denali.abraxis.com
Wed Oct 30 19:49:03 EST 1996
}
}Geoffrey Myers writes:
} > }Is there any shell command in bash that will allow me to grab keystrokes other
} > }than read. I would like to do a read command but give a time limit of
} > }60 seconds. Ne1 know how. Or does ne1 have a C program that will take
} > }the time length on the command line and return the input on STDOUT?
} >
} > I would think it would be pretty straight forward in C to fork and exec
} > a process that is going to expect the input and the parent could have the
} > timer. If the timer expires, the parent could signal the child to go away.
} > If the timer doesn't expire, the child takes the input and signals the
} > parent that it has input. You could get real fancy with pipes between the
} > two processes for communication and passing info. Really, choose your
} > favorite IPC...
} >
} > }
}
}Let's not go overboard here.
}
}This little program mayb be all you need to get the job done.
}I couldn't find a bash command to call alarm(), but I know you can catch
}signals in a bash shell. A more sophisticated version might reset the
}alarm when a keystroke is pressed.
}
}When the program exits, you can test $? in your bash program to see
}if something was really typed, or if the alarm went off.
Fair enough, good solution. Don't you need an 'alarm(0)' following the
fgets() to turn the alarm off?
}
}-------------------
}
}#include <signal.h>
}#include <stdio.h>
}
}
}void alarm_cb (int signum)
}{
} /*fprintf (stderr, "ALARM\n");*/
} exit(1);
}}
}
}int main (int argc, char * argv)
}{
} char inbuf[1024];
}
} signal (SIGALRM, alarm_cb);
} alarm(30);
} fgets(inbuf, sizeof(inbuf), stdin);
} puts(inbuf);
} return 0;
}}
}-----------------
}
--
Until later:
Geoffrey Myers geof at abraxis.com
Opinions expressed by me are mine, all mine, only mine.....
More information about the Ale
mailing list