...
| Code Block | ||
|---|---|---|
| ||
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
enum { MAXLINE = 1024 };
char *info = NULL;
void log_message() {
fprintf( stderr, info);
}
void handler(int signum) {
sleep(1);
log_message();
free( info);
}
int main(void) {
signal(SIGINT, handler);
info = (char*) malloc(MAXLINE);
while (1) {
/* main loop program code */
log_message();
/* more program code */
}
return 0;
}
|
This program has four potential problems. The first is that the log_message() function calls fprintf(), which is an unsafe function to call from within a signal handler..., because the handler might have been called when global data (such as stderr) was in an inconsistent state. In general standard I/O is never safe to invoke within a signal handler.
...