init
This commit is contained in:
52
sigcat.c
Normal file
52
sigcat.c
Normal file
@@ -0,0 +1,52 @@
|
||||
#include "sigcat.h"
|
||||
|
||||
void setup_default_handlers(void) {
|
||||
struct sigaction sa;
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
sa.sa_handler = default_signal_handler;
|
||||
sa.sa_flags = SA_RESTART;
|
||||
|
||||
for (int i = SIGMIN; i <= SIGMAX; i++) {
|
||||
// Cannot process SIGKILL or SIGSTOP
|
||||
if (i == SIGKILL || i == SIGSTOP) {
|
||||
continue;
|
||||
}
|
||||
|
||||
sigaction(i, &sa, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void default_signal_handler(int s) {
|
||||
fprintf(outputStream, "sigcat received %s\n", strsignal(s));
|
||||
fflush(outputStream);
|
||||
|
||||
if (s == SIGUSR1 || s == SIGUSR2) {
|
||||
usr_signal_handler(s);
|
||||
}
|
||||
}
|
||||
|
||||
void usr_signal_handler(int s) {
|
||||
if (s == SIGUSR1) {
|
||||
outputStream = stdout;
|
||||
} else if (s == SIGUSR2) {
|
||||
outputStream = stderr;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
// Defined in header
|
||||
outputStream = stdout;
|
||||
|
||||
setup_default_handlers();
|
||||
|
||||
// Forever loop input until recieve EOF
|
||||
char *line;
|
||||
while ((line = read_line(stdin)) != NULL) {
|
||||
strcat(line, "\n");
|
||||
fprintf(outputStream, line);
|
||||
fflush(outputStream);
|
||||
free(line);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user