Advertisement
SirNickolas

OS 6 client.cpp

Nov 27th, 2014
508
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.29 KB | None | 0 0
  1. #include <cerrno>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <unistd.h>
  5. #include <sys/iomsg.h>
  6. #include <sys/neutrino.h>
  7. #include "httpd_pid.h"
  8.  
  9. const char MSG1[ ] = "echo Timer 1 elapsed.";
  10. const char MSG2[ ] = "echo Timer 2 elapsed.";
  11.  
  12. int connectionId;
  13.  
  14. void Handler(int signalId) {
  15.     printf("SIGUSR%d\n", signalId - SIGUSR1 + 1);
  16.     const char* msg;
  17.     size_t size;
  18.     if (signalId == SIGUSR1) {
  19.         msg = MSG1;
  20.         size = sizeof MSG1;
  21.     } else {
  22.         msg = MSG2;
  23.         size = sizeof MSG2;
  24.     }
  25.     char unused;
  26.     if (MsgSend(connectionId, msg, size, &unused, sizeof unused) == -1) {
  27.         fputs("Cannot send a message\n", stderr);
  28.         exit(1);
  29.     }
  30. }
  31.  
  32. void InitTimer(struct sigaction& act, timer_t& timerId, int signalId) {
  33.     sigset_t st;
  34.     sigemptyset(&st);
  35.     sigaddset(&st, signalId);
  36.     act.sa_flags = 0;
  37.     act.sa_mask = 0x00;
  38.     act.sa_handler = Handler;
  39.     sigaction(signalId, &act, NULL);
  40.     sigevent event;
  41.     SIGEV_SIGNAL_INIT(&event, signalId);
  42.     if (timer_create(CLOCK_REALTIME, &event, &timerId) == -1) {
  43.         fprintf(stderr, "Cannot create a timer (errno %d)\n", errno);
  44.         exit(1);
  45.     }
  46. }
  47.  
  48. int main() {
  49.     FILE* f = fopen(HTTPD_PID, "r");
  50.     if (!f) {
  51.         fputs("Cannot open \"" HTTPD_PID "\"\n", stderr);
  52.         return 1;
  53.     }
  54.     int nodeDescriptor, serverId, channelId;
  55.     bool ok = fscanf(f, "%d/%d/%d", &nodeDescriptor, &serverId, &channelId) == 3;
  56.     fclose(f);
  57.     if (!ok) {
  58.         fputs("Invalid file format\n", stderr);
  59.         return 1;
  60.     }
  61.     connectionId = ConnectAttach(nodeDescriptor, serverId, channelId, 0, 0);
  62.     if (connectionId == -1) {
  63.         fputs("Server is not found\n", stderr);
  64.         return 1;
  65.     }
  66.  
  67.     struct sigaction act1, act2;
  68.     timer_t timerId1, timerId2;
  69.     itimerspec spec;
  70.     InitTimer(act1, timerId1, SIGUSR1);
  71.     InitTimer(act2, timerId2, SIGUSR2);
  72.  
  73.     spec.it_value.tv_sec  = spec.it_interval.tv_sec  = 3;
  74.     spec.it_value.tv_nsec = spec.it_interval.tv_nsec = 0;
  75.     timer_settime(timerId1, 0, &spec, NULL);
  76.  
  77.     spec.it_value.tv_sec  = spec.it_interval.tv_sec  = 4;
  78.     spec.it_value.tv_nsec = spec.it_interval.tv_nsec = (int).44e9;
  79.     timer_settime(timerId2, 0, &spec, NULL);
  80.  
  81.     while (true)
  82.         sleep(~0U);
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement