int main(int argc, char *argv[]) { struct itimerval itv; clock_t prevClock; int maxSigs; /* Number of signals to catch before exiting */ int sigCnt; /* Number of signals so far caught */ struct sigaction sa; if (argc > 1 && strcmp(argv[1], "--help") == 0) usageErr("%s [secs [usecs [int-secs [int-usecs]]]]\n", argv[0]); sigCnt = 0; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = sigalrmHandler; if (sigaction(SIGALRM, &sa, NULL) == -1) errExit("sigaction"); /* Set timer from the command-line arguments */ itv.it_value.tv_sec = (argc > 1) ? getLong(argv[1], 0, "secs") : 2; itv.it_value.tv_usec = (argc > 2) ? getLong(argv[2], 0, "usecs") : 0; itv.it_interval.tv_sec = (argc > 3) ? getLong(argv[3], 0, "int-secs") : 0; itv.it_interval.tv_usec = (argc > 4) ? getLong(argv[4], 0, "int-usecs") : 0; /* Exit after 3 signals, or on first signal if interval is 0 */ maxSigs = (itv.it_interval.tv_sec == 0 && itv.it_interval.tv_usec == 0) ? 1 : 3; displayTimes("START:", FALSE); if (setitimer(ITIMER_REAL, &itv, NULL) == -1) errExit("setitimer"); prevClock = clock(); sigCnt = 0; for (;;) { /* Inner loop consumes at least 0.5 seconds CPU time */ while (((clock() - prevClock) * 10 / CLOCKS_PER_SEC) < 5) { if (gotAlarm) { /* Did we get a signal? */ gotAlarm = 0; displayTimes("ALARM:", TRUE); sigCnt++; if (sigCnt >= maxSigs) { printf("That's all folks\n"); exit(EXIT_SUCCESS); } } } prevClock = clock(); displayTimes("Main: ", TRUE); } }
int main() { displayTimes(24.4833, 54.35, "Abu Dhabi", 3, 9, 2014, 4, 0, 7); printf("Verified times for Abu Dhabi on 3/ 9/2014\n4:38:32 6:03:14 12:20:52 15:49:22 18:38:09 20:08:09\n"); displayTimes(51.500152, -0.126236, "London", 1, 1, 2014, 0, 0, 10); printf("Verified times for London on 1/ 1/2014\n6:24:53 8:04:53 12:07:53 13:44:04 16:04:05 17:38:05\n"); displayTimes(24.671978, 46.675415, "Riyadh", 3, 9, 2014, 3, 0, 6); printf("Verified times for Riyadh on 3/ 9/2014\n4:15:56 5:33:49 11:51:34 15:20:16 18:08:57 19:38:57\n"); return 0; }