/*
* Include needed headers
*/
+#define _GNU_SOURCE
#include <unistd.h> /* unix standard library */
+#include <signal.h> /* signal standard library */
-unsigned int sleep(unsigned int seconds)
-{
-/*
- * Variables definition
- */
- signandler_t prev_handler;
-
- if ((prev_handler = signal(SIGALRM, alarm_hand)) == SIG_ERR) {
- printf("Cannot set handler for alarm\n");
- exit(1);
- }
- alarm(second);
- pause();
- /* restore previous signal handler */
- signal(SIGALRM, prev_handler);
- /* remove alarm, return remaining time */
- return alarm(0);
-}
void alarm_hand(int sig) {
/* check if the signal is the right one */
if (sig != SIGALRM) { /* if not exit with error */
return;
}
}
+unsigned int sleep(unsigned int seconds)
+{
+ sighandler_t prev_handler;
+ /* install and check new handler */
+ if ((prev_handler = signal(SIGALRM, alarm_hand)) == SIG_ERR) {
+ printf("Cannot set handler for alarm\n");
+ exit(-1);
+ }
+ /* set alarm and go to sleep */
+ alarm(seconds);
+ pause();
+ /* restore previous signal handler */
+ signal(SIGALRM, prev_handler);
+ /* return remaining time */
+ return alarm(0);
+}