Bonjour
je suis entrain de réaliser un serveur qui reçoit des signaux (via kill)


voila monde code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
#include "../include/header.h"
 
t_data	data;
 
void handler(int sig, siginfo_t *info, void *cont)
{
  data.pid = info->si_pid;
  if (sig == SIGUSR1)
    data.signal_h = 0;
  else if (sig == SIGUSR2)
    data.signal_h = 1;
  (void)cont;
}
 
void	display_pid()
{
  my_printf("Server PID : ");
  my_printf("%d\n",getpid());
}
 
int			main()
{
  struct sigaction	sVal;
  int	i;
  int	value;
  value = 0;
  i = 1;
  display_pid();
  data.signal_h = -1;
  sVal.sa_flags = SA_SIGINFO;
  sVal.sa_sigaction = &handler;
  sigemptyset(&sVal.sa_mask);
  sigaction(SIGUSR1, &sVal, NULL);
  sigaction(SIGUSR2, &sVal, NULL);
  while (42)
    {
      pause();
      if (i == 9)
      	{
	  printf("%c",value);
	  value = 0 ;
      	  i = 1;
      	}
      if (data.signal_h == 1)
	value += pow(2, 8 - i);
      data.signal_h = -1;
      i++;
      /* usleep(100); */
      kill(data.pid, SIGUSR1);
    }
}
et voila le fichier header.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
 
typedef struct  s_data
{
  int   signal_h;
  int   pid;
}               t_data;
le probleme c'est qu'il ne capte pas toujours les signaux qu'il recoit , le programme reste defois en pause , je ne comprend pas pourquoi
Pouvez vous m'aider ?