|
|
@@ -10,13 +10,13 @@
|
|
|
|
|
|
/*
|
|
|
* signal and timer example
|
|
|
- *
|
|
|
+ *
|
|
|
* timerTest.c
|
|
|
*/
|
|
|
|
|
|
/*
|
|
|
* map timer code to a string
|
|
|
- *
|
|
|
+ *
|
|
|
*/
|
|
|
|
|
|
#define MAX_LEN_NAME 128
|
|
|
@@ -24,76 +24,76 @@
|
|
|
SLIST_HEAD(slisthead, entry) head = SLIST_HEAD_INITIALIZER(head);
|
|
|
struct slisthead *headp; /* Singly-linked List head. */
|
|
|
struct entry {
|
|
|
- char *name;
|
|
|
+ char *name;
|
|
|
int code;
|
|
|
- SLIST_ENTRY (entry) entries; /* Singly-linked List. */
|
|
|
-} *np;
|
|
|
+ SLIST_ENTRY(entry) entries; /* Singly-linked List. */
|
|
|
+} *np;
|
|
|
|
|
|
/*
|
|
|
* signal handler
|
|
|
- *
|
|
|
+ *
|
|
|
*/
|
|
|
|
|
|
-static int spankme;
|
|
|
+static int spankme;
|
|
|
|
|
|
- void
|
|
|
+void
|
|
|
sigHandler(int signo, siginfo_t * si, void * /* ucontext_t */ uap)
|
|
|
{
|
|
|
switch (signo) {
|
|
|
- case SIGALRM:
|
|
|
- /* timer timeout */
|
|
|
- SLIST_FOREACH(np, &head, entries) {
|
|
|
- if (np && np->code == si->si_value.sival_int) {
|
|
|
- flockfile(stdout);
|
|
|
- printf("%s", np->name);
|
|
|
- fflush(stdout);
|
|
|
- funlockfile(stdout);
|
|
|
- break;
|
|
|
- }
|
|
|
+ case SIGALRM:
|
|
|
+ /* timer timeout */
|
|
|
+ SLIST_FOREACH(np, &head, entries) {
|
|
|
+ if (np && np->code == si->si_value.sival_int) {
|
|
|
+ flockfile(stdout);
|
|
|
+ printf("%s", np->name);
|
|
|
+ fflush(stdout);
|
|
|
+ funlockfile(stdout);
|
|
|
+ break;
|
|
|
}
|
|
|
- if (np == NULL)
|
|
|
- printf("Timeout #%d, unknown.\n", si->si_value.sival_int);
|
|
|
- break;
|
|
|
- case SIGINFO:
|
|
|
- printf("no need to panic.\n");
|
|
|
- break;
|
|
|
- case SIGINT:
|
|
|
- /* exit flag */
|
|
|
- ++spankme;
|
|
|
- break;
|
|
|
- default:
|
|
|
- printf("sig:%d received.", signo);
|
|
|
- break;
|
|
|
+ }
|
|
|
+ if (np == NULL)
|
|
|
+ printf("Timeout #%d, unknown.\n", si->si_value.sival_int);
|
|
|
+ break;
|
|
|
+ case SIGINFO:
|
|
|
+ printf("no need to panic.\n");
|
|
|
+ break;
|
|
|
+ case SIGINT:
|
|
|
+ /* exit flag */
|
|
|
+ ++spankme;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ printf("sig:%d received.", signo);
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
- int
|
|
|
+int
|
|
|
main(int argc, char *argv[])
|
|
|
{
|
|
|
SLIST_INIT(&head);
|
|
|
|
|
|
/* timer pointers */
|
|
|
- size_t nb_timers = 5;
|
|
|
+ size_t nb_timers = 5;
|
|
|
|
|
|
- if(argc>1){
|
|
|
+ if (argc > 1) {
|
|
|
nb_timers = atoi(argv[1]);
|
|
|
}
|
|
|
|
|
|
- if(nb_timers<1){
|
|
|
- fprintf(stderr,"Invalid timer number.\n");
|
|
|
+ if (nb_timers < 1) {
|
|
|
+ fprintf(stderr, "Invalid timer number.\n");
|
|
|
abort();
|
|
|
}
|
|
|
|
|
|
- timer_t timerid[nb_timers];
|
|
|
- char *names[nb_timers];
|
|
|
+ timer_t timerid[nb_timers];
|
|
|
+ char *names[nb_timers];
|
|
|
|
|
|
/* build text to display for each */
|
|
|
- for(size_t i = 0; i < nb_timers; ++i) {
|
|
|
+ for (size_t i = 0; i < nb_timers; ++i) {
|
|
|
|
|
|
names[i] = malloc(MAX_LEN_NAME);
|
|
|
if (i == 0) {
|
|
|
- strncpy(names[i],".",MAX_LEN_NAME);
|
|
|
+ strncpy(names[i], ".", MAX_LEN_NAME);
|
|
|
continue;
|
|
|
}
|
|
|
if (MAX_LEN_NAME <= snprintf(names[i], MAX_LEN_NAME, "+%zu+", i * 2 + 1)) {
|