[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