diff --git a/signals/Makefile b/signals/Makefile new file mode 100644 index 0000000..33eef5b --- /dev/null +++ b/signals/Makefile @@ -0,0 +1,24 @@ +CC ?= gcc +CFLAGS ?= -Wall -O2 + +# This is not how makefiles should be written. +# Pretend you did not see this + +all: main.elf main_sigaction.elf + +TARGET = main.elf +SRC = main.c + +TARGET2 = main_sigaction.elf +SRC2 = main_sigaction.c + +$(TARGET): $(SRC) + @echo CC $@ + @$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +$(TARGET2): $(SRC2) + @echo CC $@ + @$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +clean: + rm -f *.elf diff --git a/signals/main.c b/signals/main.c new file mode 100644 index 0000000..b554fda --- /dev/null +++ b/signals/main.c @@ -0,0 +1,17 @@ +#include +#include +#include +#include + +void handler(int sig) { + printf("Caught signal %d\n", sig); + exit(1); +} + +int main() { + signal(SIGINT, handler); // Handle Ctrl+C + while (1) { + printf("Running...\n"); + sleep(1); + } +} diff --git a/signals/main_sigaction.c b/signals/main_sigaction.c new file mode 100644 index 0000000..7b8f128 --- /dev/null +++ b/signals/main_sigaction.c @@ -0,0 +1,23 @@ +#include +#include +#include +#include + +void handler(int sig) { + write(1, "Caught SIGINT\n", 14); // Async-signal-safe output + exit(1); +} + +int main() { + struct sigaction sa; + sa.sa_handler = handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + + sigaction(SIGINT, &sa, NULL); + + while (1) { + printf("Running...\n"); + sleep(1); + } +}