Signals exampe, sigaction included
This commit is contained in:
parent
f3522129a3
commit
080928d3fd
3 changed files with 64 additions and 0 deletions
24
signals/Makefile
Normal file
24
signals/Makefile
Normal file
|
|
@ -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
|
||||
17
signals/main.c
Normal file
17
signals/main.c
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
23
signals/main_sigaction.c
Normal file
23
signals/main_sigaction.c
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue