HappyPotato18

Оно работает один раз из ста

Apr 6th, 2020
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.22 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <dirent.h>
  3. #include <sys/types.h>
  4. #include <sys/param.h>
  5. #include <unistd.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <time.h>
  9. #include <sys/wait.h>
  10. #include <sys/signal.h>
  11.  
  12. void child_proc_1_handler(int signum, siginfo_t *info, void *f) {
  13.  
  14.     if (info->si_code == SI_QUEUE)
  15.     {
  16.         printf("3 \n");
  17.         printf("Number of elements:%lu \n", sizeof(info->si_value));
  18.    
  19.     }
  20.  
  21.     printf("4");
  22.  
  23.     return;
  24. }
  25.  
  26.  
  27. int main(int argc, const char **argv)
  28. {
  29.  
  30.     if (argc != 2)
  31.     {
  32.         printf("Not enough arguments... \n");
  33.         exit(EXIT_FAILURE);
  34.     }
  35.     char *str = argv[1];
  36.     struct sigaction act;
  37.     memset(&act, 0, sizeof(act));
  38.     act.sa_sigaction = child_proc_1_handler;  
  39.     sigemptyset(&act.sa_mask);
  40.     sigaddset(&act.sa_mask, SIGUSR1);
  41.     act.sa_flags = SA_SIGINFO;
  42.     pid_t child_proc_1 = fork();
  43.     if(child_proc_1 > 0)
  44.     {
  45.         union sigval value;
  46.         int status;
  47.         value.sival_ptr = str;
  48.         printf("1 \n");
  49.         sigqueue(child_proc_1,SIGUSR1,value);
  50.         printf("2 \n");
  51.         wait(&status);
  52.         printf("6 \n");
  53.     }
  54.     else if (child_proc_1 == 0)
  55.     {
  56.         sigaction(SIGUSR1,&act,NULL);
  57.         printf("5 \n");
  58.         exit(333);
  59.  
  60.  
  61.     }
  62.     else
  63.     {
  64.         printf("Loshara");
  65.     }  
  66.     return 0;
  67. }
Add Comment
Please, Sign In to add comment