Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cerrno>
- #include <cstdio>
- #include <cstdlib>
- #include <unistd.h>
- #include <sys/iomsg.h>
- #include <sys/neutrino.h>
- #include "httpd_pid.h"
- const char MSG1[ ] = "echo Timer 1 elapsed.";
- const char MSG2[ ] = "echo Timer 2 elapsed.";
- int connectionId;
- void Handler(int signalId) {
- printf("SIGUSR%d\n", signalId - SIGUSR1 + 1);
- const char* msg;
- size_t size;
- if (signalId == SIGUSR1) {
- msg = MSG1;
- size = sizeof MSG1;
- } else {
- msg = MSG2;
- size = sizeof MSG2;
- }
- char unused;
- if (MsgSend(connectionId, msg, size, &unused, sizeof unused) == -1) {
- fputs("Cannot send a message\n", stderr);
- exit(1);
- }
- }
- void InitTimer(struct sigaction& act, timer_t& timerId, int signalId) {
- sigset_t st;
- sigemptyset(&st);
- sigaddset(&st, signalId);
- act.sa_flags = 0;
- act.sa_mask = 0x00;
- act.sa_handler = Handler;
- sigaction(signalId, &act, NULL);
- sigevent event;
- SIGEV_SIGNAL_INIT(&event, signalId);
- if (timer_create(CLOCK_REALTIME, &event, &timerId) == -1) {
- fprintf(stderr, "Cannot create a timer (errno %d)\n", errno);
- exit(1);
- }
- }
- int main() {
- FILE* f = fopen(HTTPD_PID, "r");
- if (!f) {
- fputs("Cannot open \"" HTTPD_PID "\"\n", stderr);
- return 1;
- }
- int nodeDescriptor, serverId, channelId;
- bool ok = fscanf(f, "%d/%d/%d", &nodeDescriptor, &serverId, &channelId) == 3;
- fclose(f);
- if (!ok) {
- fputs("Invalid file format\n", stderr);
- return 1;
- }
- connectionId = ConnectAttach(nodeDescriptor, serverId, channelId, 0, 0);
- if (connectionId == -1) {
- fputs("Server is not found\n", stderr);
- return 1;
- }
- struct sigaction act1, act2;
- timer_t timerId1, timerId2;
- itimerspec spec;
- InitTimer(act1, timerId1, SIGUSR1);
- InitTimer(act2, timerId2, SIGUSR2);
- spec.it_value.tv_sec = spec.it_interval.tv_sec = 3;
- spec.it_value.tv_nsec = spec.it_interval.tv_nsec = 0;
- timer_settime(timerId1, 0, &spec, NULL);
- spec.it_value.tv_sec = spec.it_interval.tv_sec = 4;
- spec.it_value.tv_nsec = spec.it_interval.tv_nsec = (int).44e9;
- timer_settime(timerId2, 0, &spec, NULL);
- while (true)
- sleep(~0U);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement