segmentation fault avec variable globale
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.
Code:
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);
} |
voici le récepteur.
Code:
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);
} |
Code:
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 l'éméteur
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.