Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

URGENT :File de Message sous MANDRAKE LINUX

1 réponse
Avatar
rikiki.cyr
Bonjour,
tout d'abord merci de venir lire mon sujet
voila mon probleme est lui suivant:
je crées un processus pere qui va créer une file de message et qui va
posté un message dans cette file, ensuite mon processus fait un fork
pour en dégager un fils qui lui sera recouvert par un execve d'un code
qui va lire le message dans la fil de message.
Seulement voila mon programme marche vraiment mais j'ai un probleme,
lorsque je met mon type de message a mtype>1 dans la déclaration de
mon pere. Eh bien lors de l'execution j'ai des informations concernant
les actions des processus qui s'affiche tout le long de mon programme
voir : http://rikiki51.chez.tiscali.fr/
En revanche si je met mon mtype=1 alors il n'y a pas de probleme, mais
j'ai besoin de gere différent type de message donc c pluto génant
d'avoir toutes ces informations qui s'affichent.

JE vous remerci donc votre attention et attend une répons plus que
rapide car j'ai une présentation orale à faire d'ici peu, merci de
votre comprehension.

*************************************************************************
PERE.C

#include <stdio.h>
#include <sys/types.h>
#include <msg.h>
#include <ipc.h>
#include <errno.h>
#define MSG_R 0400
#define MSG_W 0200
#define msgsize 50

struct msgtext {
long mtype;
char mtext[msgsize];
};//description du message en lui meme, en remplacement de la
structure msgbuf de msg.h

int main () {

struct msgtext *message;//declaration d'un message
struct msgtext *message2;

int pid=0;
int pidf=0;
int msgid;/*identificateur de la fil de message*/
key_t key;
int resultatdepot, resultatretire;


/*Creer une clé unique pour indentifier la file de message*/
key=ftok("/home/rikiki/se/cle", 'a');

/*msgget créer la file, l'identificateur de la file est recu par
msgid
création d'une file de message en lecteure ecriture si elle
n'existe pas*/
if((msgid=msgget(key,IPC_CREAT|IPC_EXCL|MSG_R|MSG_W))==-1)
{//-1 si erreur

perror("ECHEC de msgget");

/*Suppression de la file crée*/
msgctl(msgid, 0, IPC_RMID);

exit(1);
}
printf("Identificateur de la file de message :%d \nCette file est
identifiee par la cle unique: %ld\n ",msgid, key);

/*le type du message est 1*/
message->mtype=56985;//LIGNE DU PROBLEME
/*le texte du message est ...*/
strcpy(message->mtext,"je suis le texte du msg\0");

/*On depose le message <message> dans la file de message msqid*/
if ((resultatdepot=msgsnd(msgid, message, msgsize, 0))==-1)
{
perror("ECHEC du depot du message\n");
}
else
{
printf("-->message depose dans la file\n");
}


/*Creation d'un pocessus fils chargé d'aller lire le message*/
switch (pidf=fork())
{
case -1 :
perror("erreur dans la création du fils \n");
exit(1);

case 0 :
printf("...bonjour...je suis le fils: %d \n", getpid());
execl("fils",0);
break;

default:
pid=wait();
break;
}


/*Suppression de la file crée*/
msgctl(msgid, 0, IPC_RMID);

}
*************************************************************************
FILS.C
#include <stdio.h>
#include <sys/types.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <errno.h>

#define MSG_R 0400
#define MSG_W 0200
#define IPC_ALLOC
#define msgsize 50

struct msgtext {
long mtype;
char mtext[msgsize];
};//description du message en lui meme, en remplacement de la
structure msgbuf de msg.h


int main () {

struct msgtext *mess;

int msgid;
int resultatretire;
key_t key;

printf("je suis le fils youpi !!\n ");

key=ftok("/home/rikiki/se/cle",'a');

msgid=msgget(key,0666);

printf("identifiant de la file chez le FILS: %d \n",msgid);



/*On retire le message <message> dans la file de message msqid
sizeof(struct msgtext)-4*/
if ((resultatretire=msgrcv(msgid, mess, msgsize, 0,0))==-1)
{
perror("ECHEC du retrait du message\n");
}
else
{
printf("-->message retire dans la file\n");
printf("contenu du message: %s\n",mess->mtext);
}


}

1 réponse

Avatar
Yves ROMAN

Bonjour,
tout d'abord merci de venir lire mon sujet
voila mon probleme est lui suivant:
je crées un processus pere qui va créer une file de message et qui va
posté un message dans cette file, ensuite mon processus fait un fork
pour en dégager un fils qui lui sera recouvert par un execve d'un code
qui va lire le message dans la fil de message.
Seulement voila mon programme marche vraiment mais j'ai un probleme,
lorsque je met mon type de message a mtype>1 dans la déclaration de
mon pere. Eh bien lors de l'execution j'ai des informations concernant
les actions des processus qui s'affiche tout le long de mon programme
voir : http://rikiki51.chez.tiscali.fr/
En revanche si je met mon mtype=1 alors il n'y a pas de probleme, mais
j'ai besoin de gere différent type de message donc c pluto génant
d'avoir toutes ces informations qui s'affichent.



Vois plutot un forum Unix

Cela dit quelques remarques :
- tes pointeurs messages et mess ne sont pas initialisés : ton programme devrait
planter : c'est peut du au fait que tu tape n'importe ou en mémoire qui
déclenche une sorte de mode Debug
Utilise des struct msgtext plutot que des struct msgtext *

- tu devrait envoyer et lire une taille de sizeof(struct msgtext). Tu perd la
fin du message, ce qui n'est pas génant avec la taille réduite du texte, mais le
deviendra lorsqu'il sera rempli complètement.