diff options
author | Anton Kling <anton@kling.gg> | 2023-10-30 20:46:36 +0100 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2023-10-30 21:49:48 +0100 |
commit | ecf1e4c6c6efc3edeb006ff120ac60a191ddce50 (patch) | |
tree | db5e312704d43ec8ff0a81bc87c9a1cdf6b01970 /includes/signal.h | |
parent | c7a07bf214ef9b3fabc15c8e70f696ede9644c2c (diff) |
Kernel/LibC: Add signals and support for custom signal handlers to processes.
Diffstat (limited to 'includes/signal.h')
-rw-r--r-- | includes/signal.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/includes/signal.h b/includes/signal.h new file mode 100644 index 0000000..3de9998 --- /dev/null +++ b/includes/signal.h @@ -0,0 +1,46 @@ +#ifndef SIGNAL_H +#define SIGNAL_H +#include <sys/types.h> +#define SIGHUP 0 +#define SIGINT 1 +#define SIGWINCH 2 +#define SIGQUIT 3 +#define SIG_IGN 4 +typedef int pid_t; +typedef int uid_t; +typedef int sigset_t; + +union sigval { + int sival_int; // Integer signal value. + void *sival_ptr; // Pointer signal value. +}; + +struct siginfo { + int si_signo; // Signal number. + int si_code; // Signal code. + int si_errno; // If non-zero, an errno value associated with + // this signal, as described in <errno.h>. + pid_t si_pid; // Sending process ID. + uid_t si_uid; // Real user ID of sending process. + void *si_addr; // Address of faulting instruction. + int si_status; // Exit value or signal. + long si_band; // Band event for SIGPOLL. + union sigval si_value; // Signal value. +}; + +typedef struct siginfo siginfo_t; + +int kill(pid_t pid, int sig); + +struct sigaction { + void (*sa_handler)(int); // Pointer to a signal-catching function or one of + // the macros SIG_IGN or SIG_DFL. + sigset_t sa_mask; // Additional set of signals to be blocked during execution + // of signal-catching function. + int sa_flags; // Special flags to affect behavior of signal. + void (*sa_sigaction)(int, siginfo_t *, + void *); // Pointer to a signal-catching function. +}; + +int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); +#endif // SIGNAL_H |