Newer
Older
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <csignal>
#include <cstdlib>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
volatile bool running = true;
void handle_signal(int signal_number) {
std::cout << "Server received signal: " << signal_number << std::endl;
running = false;
}
int main(){
// Signal handling
struct sigaction sa;
sa.sa_handler = handle_signal;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
if (sigaction(SIGINT, &sa, nullptr) == -1 || sigaction(SIGTERM, &sa, nullptr) == -1) {
perror("Failed to set signal handler");
exit(EXIT_FAILURE);
}
const char* fifo_path = "my_fifo";
// Open FIFO for writing
int fd = open(fifo_path, O_WRONLY);
if (fd == -1) {
perror("Server failed to open FIFO for writing");
exit(EXIT_FAILURE);
}
int number = 0;
while (running) {
// Write numbers to FIFO
if (write(fd, &number, sizeof(number)) == -1) {
perror("Failed to write to FIFO");
running = false;
}
std::cout << "Server sent: " << number << std::endl;
number++;
sleep(1);
}
close(fd);
std::cout << "Server exiting..." << std::endl;
return 0;
}
/*
erver sent: 53
Server sent: 54
Server sent: 55
Server sent: 56
Server sent: 57
Server sent: 58
Server sent: 59
Server sent: 60
Server sent: 61
killing the server:
Server sent: 99
Server sent: 100
Server received signal: 15
Server exiting...
output of client:
Client received: 97
Client received: 98
Client received: 99
Client received: 100
Failed to read from FIFO: Success
Client exiting...
with kill -9 client
Client received: 13
Client received: 14
Client received: 15
Client received: 16
[1] 11097 killed ./client_5
Server sent: 12
Server sent: 13
Server sent: 14
Server sent: 15
Server sent: 16
~/workspace:
*/