sparetime
Messages postés34Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention17 août 2004
-
17 août 2004 à 10:03
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011
-
18 août 2004 à 08:30
bonjour
j'ai un pb avec ce code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHM_SIZE 4096 /* make it a 4K shared memory segment */
int main()
{
key_t key,key_flag;
int shmid,id_flag;
char *data,*message;
int mode,*flag,c;
/* make the key: */ if ((key_flag ftok("shm.c", 'A')) -1) {
perror("ftok");
exit(1);
} if ((id_flagshmget(key_flag,sizeof(int), 0644 | IPC_CREAT)) -1) {
perror("shmget");
exit(1);
}
flag =(int*) shmat(id_flag, NULL, 0);
if (flag ==(int*) -1) {
perror("shmat");
exit(1);
}
printf("quel est votre choix \n");
scanf("%d",&c);
(*flag)=c;
printf("le drapeau ecrit dans le segment a pour numero: "%d"\n",c);
switch(c)
{
case 1:
printf("demande d'établissement d'une connexion\n");
break;
case 2:
printf("demande d'ouverture de session\n");
break;
case 3:
printf("demande d'envoi de message \n");
{if ((key ftok("shm.c", 'R')) -1) {
perror("ftok");
exit(1);
}
/* connect to (and possibly create) the segment: */ if ((shmid shmget(key,SHM_SIZE, 0644 | IPC_CREAT)) -1) {
perror("shmget");
exit(1);
}
/* attach to the segment to get a pointer to it: */
data =(char*) shmat(shmid, NULL, 0);
if (data == (char*)-1) {
perror("shmat");
exit(1);
}
/* modify the segment */
printf("entrez ici votre message \n");
fflush(stdin);
fgets(message,sizeof(message),stdin);
printf("message ecrit dans le segment: "%s"\n",message);
strncpy(data, message,SHM_SIZE);
/* detach from the segment: */
if (shmdt((char*)data) == -1) {
perror("shmdt1");
exit(1);
}
return 0;
}
mon pb est que pour le cas ou c=3
j'obtiens segmentation fault meme avant d'entrer le message et je ne vois d'ou ca arrive
des idees!!!
merci d'avance