bonjour,
suite a un projet a développé ou je dois utilisé la fonction signal pour envoyer et recevoir des information.
Je me retrouve dans l'impasse suite a segfault.
je tiens a préciser que mon niveaux en programmation n'est pas très élevée.
voici le récepteur.
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
53
54
55
56
57
58
59
60
61 #include <signal.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> char *global; int check_global() { int i; i = 0; while (global[i] != 0) { if (global[i] == '0' && global[i + 1] == '0') return (-1); i = i + 1; } return (0); } void handler(int signo) { static int i; i = 0; global = malloc(sizeof(char)); if (signo == SIGUSR1) { write(1, "o", 1); global[i] = '1'; } else { write(1, "t", 1); global[i] = '0'; } i = i + 1; global[i] = 0; } int main() { while (1) { usleep(1); if (signal(SIGUSR1, handler) == SIG_ERR) { return (-1); } if (signal(SIGUSR2, handler) == SIG_ERR) { return (-1); } if (check_global() == -1) break; } my_putstr(global); return (0); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #include <unistd.h> void my_putstr(char *str) { int i; i = 0; write(1, &str[i++], 1); }
et l'éméteur
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 #include <signal.h> #include <sys/types.h> int main(int ac, char **av) { int i; char *str; str = "101100"; i = 0; while (str[i] != 0) { if (str[i] == '1') kill(atoi(av[1]), SIGUSR1); usleep(10000); if (str[i] == '0') kill(atoi(av[1]), SIGUSR2); usleep(10000); i = i + 1; } return (0); }
et donc le résultat donne
[1] 18940 segmentation fault (core dumped) ./USR1
alors que je souhaiterez avoir le résultat "101100". dans "global"
et ensuite l'afficher
merci par avance de vos réponse.
Partager