-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathsignals.cpp
39 lines (32 loc) · 832 Bytes
/
signals.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//
// Created by nbollom on 27/06/16.
//
#include "signals.hpp"
#include <map>
#include <csignal>
using namespace std;
map<int, function<void(int)>> function_map;
void SignalCallback(const int signal_code) {
if (function_map[signal_code]) {
function_map[signal_code](signal_code);
}
}
int AddSignalCallback(const int signal_code, const function<void(int)> &callback) {
if (function_map[signal_code]) {
return -1;
}
function_map[signal_code] = callback;
signal(signal_code, SignalCallback);
return 0;
}
int RemoveSignalCallback(const int signal_code) {
if (function_map[signal_code]) {
function_map[signal_code] = nullptr;
signal(signal_code, SIG_DFL);
return 0;
}
return -1;
}
void RaiseSignal(const int signal_code) {
raise(signal_code);
}