Advertisement
Guest User

Untitled

a guest
Mar 21st, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.12 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <sys/mman.h>
  6. #include <errno.h>
  7. #include <fcntl.h>
  8. #include <sys/stat.h>
  9. #include <semaphore.h>
  10. #include <time.h>
  11. #include <signal.h>
  12. #include <limits.h>
  13.  
  14. #define RELATIVE_TIMER 0
  15. #define ABSOLUTE_TIMER 1
  16.  
  17. struct sigaction sig_act;
  18. struct sigaction sig_act1;
  19. timer_t timer_id,timer_id_Ten,timer_id_Inter_SIG;
  20.  
  21. struct itimerspec timer_def,timer_Ten,timer_Ten_Wait,timer_Sig;
  22. struct sigevent sig_pour_timer;
  23.  
  24.  
  25. union sigval sigval_appl;
  26.  
  27. //pid_t id_main;
  28.  
  29. int Occur = 1;
  30.  
  31. void Handler_Signaux(int signal,siginfo_t *siginfo_hdler,int *val);
  32. void Handler_Timers(int signal,siginfo_t *siginfo_hdler,int *val);
  33.  
  34. int main(int argc, char *argv[])
  35. {
  36. int ret_val ;
  37. //*********************************************************************************
  38. // DEFINIR COMPORTEMENT DU PROCESS COURANT POUR UN SIGNAL DONNE
  39. // * COMPORTEMENT : HANDLER
  40. // Handler_Signaux
  41. // SIGNAL : SIGUSR1
  42. // FLAGS : sa_siginfo
  43. //
  44. //*******************************************************************************
  45.  
  46. sig_act.sa_handler = Handler_Signaux;
  47. sig_act.sa_flags = SA_SIGINFO;
  48. if((ret_val = sigaction(SIGALRM, &sig_act, 0)) == -1)
  49. {
  50. perror("\nErreur Sigaction ! \n");
  51. exit(1);
  52. }
  53.  
  54. sig_pour_timer.sigev_signo = SIGUSR1;
  55. sig_pour_timer.sigev_notify = SIGEV_SIGNAL;
  56.  
  57. sig_act1.sa_handler = Handler_Timers;
  58. sig_act1.sa_flags = SA_SIGINFO;
  59. if((ret_val = sigaction(SIGUSR1, &sig_act1, 0)) == -1)
  60. {
  61. perror("\nErreur Sigaction ! \n");
  62. exit(1);
  63. }
  64.  
  65. //*********************************************************************************
  66. // CREATION D'UN TIMER
  67. // IDENTIFICATEUR : timer_id, etc.
  68. // HORLOGE : CLOCK_REALTIME
  69. // STRUCTURE SIGEVENT : Sig par defaut (SIGALARM), sig_pour_timer pour le timer one shot
  70. //
  71. //*******************************************************************************
  72.  
  73.  
  74. if((timer_create(CLOCK_REALTIME, 0, &timer_id_Ten)) == -1) //10 secondes
  75. {
  76. perror("Erreur creation timer\n");
  77. exit(1);
  78. }
  79. timer_Ten.it_value.tv_sec = 10;
  80. timer_Ten.it_value.tv_nsec = 0;
  81. timer_Ten.it_interval.tv_sec = 0;
  82. timer_Ten.it_interval.tv_nsec = 0;
  83.  
  84.  
  85. if((timer_create(CLOCK_REALTIME, &sig_pour_timer, &timer_id)) == -1) //one shot 2 secondes
  86. {
  87. perror("Erreur creation timer\n");
  88. exit(1);
  89. }
  90. timer_def.it_value.tv_sec = 2;
  91. timer_def.it_value.tv_nsec = 0;
  92. timer_def.it_interval.tv_sec = 0;
  93. timer_def.it_interval.tv_nsec = 0;
  94.  
  95.  
  96. if((timer_create(CLOCK_REALTIME, 0 , &timer_id_Inter_SIG)) == -1) //5 secondes secondes
  97. {
  98. perror("Erreur creation timer\n");
  99. exit(1);
  100. }
  101. timer_Sig.it_value.tv_sec = 0;
  102. timer_Sig.it_value.tv_nsec = 1;
  103. timer_Sig.it_interval.tv_sec = 0;
  104. timer_Sig.it_interval.tv_nsec = 500000000;//500000000
  105.  
  106. while(1)
  107. {
  108. //*********************************************************************************
  109. // INIT D'UN TIMER
  110. // IDENTIFICATEUR : timer_id,etc.
  111. // FLAGS : RELATIVE_TIMER
  112. // TIMINGS itermspec : timer_def, etc.
  113. //
  114. //*******************************************************************************
  115. puts("DEBUT 10 SEC");
  116. if((timer_settime(timer_id_Ten, RELATIVE_TIMER, &timer_Ten, 0)) == -1)
  117. {
  118. perror("Erreur init. timer 10\n");
  119. exit(1);
  120. }
  121.  
  122.  
  123. puts("DEBUT 2 SEC");
  124. if((timer_settime(timer_id, RELATIVE_TIMER, &timer_def, 0)) == -1)
  125. {
  126. perror("Erreur init. timer 2 \n");
  127. exit(1);
  128. }
  129. timer_def.it_value.tv_sec = 2;
  130.  
  131. timer_gettime(timer_id_Ten,&timer_Ten_Wait);
  132. while(timer_Ten_Wait.it_value.tv_sec!=0 && timer_Ten_Wait.it_value.tv_nsec!=0)
  133. {
  134. timer_gettime(timer_id_Ten,&timer_Ten_Wait);
  135. }
  136. puts("FIN TIMER 10S");
  137. timer_Ten.it_value.tv_sec = 10;
  138. }
  139.  
  140. return EXIT_SUCCESS;
  141. }
  142.  
  143. /**********************************************************************************/
  144. /*GESTIONNAIRE DE SIGNAUX**********************************************************/
  145. /**********************************************************************************/
  146.  
  147. void Handler_Signaux(int signal, siginfo_t *siginfo_hdler, int *val)
  148. {
  149. printf("\nHandler : Signal : %d, %d",signal, Occur);
  150. puts("");
  151. printf("Handler : si_signo : %d",siginfo_hdler->si_signo);
  152.  
  153. printf("\nHandler : si_code : %d",siginfo_hdler->si_code);
  154.  
  155. printf("\nHandler : si_value : %d\n",siginfo_hdler->si_value.sival_int);
  156.  
  157. Occur++;
  158.  
  159. }
  160.  
  161. void Handler_Timers(int signal, siginfo_t *siginfo_hdler, int *val)
  162. {
  163. int tmp = 0, bou = 0;
  164.  
  165. Occur++;
  166. printf("\nHandler : Signal : %d",signal);
  167. puts("");
  168.  
  169. printf("Handler : si_signo : %d",siginfo_hdler->si_signo);
  170.  
  171. printf("\nHandler : si_code : %d",siginfo_hdler->si_code);
  172.  
  173. printf("\nHandler : si_value : %d\n",siginfo_hdler->si_value.sival_int);
  174.  
  175. if((timer_settime(timer_id_Inter_SIG, 0, &timer_Sig, 0)) == -1)
  176. {
  177. perror("Erreur init. timer 5\n");
  178. exit(1);
  179. }
  180.  
  181. tmp = Occur;
  182. while(bou < 10)
  183. {
  184. bou = Occur - tmp;
  185. if(bou > 10)
  186. {
  187. puts("");
  188. }
  189. }
  190.  
  191. timer_Sig.it_interval.tv_nsec = 0;
  192. if((timer_settime(timer_id_Inter_SIG, RELATIVE_TIMER, &timer_Sig, 0)) == -1)
  193. {
  194. perror("Erreur init. timer 5\n");
  195. exit(1);
  196. }
  197. timer_Sig.it_interval.tv_nsec = 500000000;
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement