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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/msg.h>
struct msgbuf {
long mtype;
char mtext[128];
pid_t pid;
};
/*struct connect {
char pseudo[30];
int pid;
}*/
int main(int argc, char *argv[])
{
int taille, write, msqid,pid;
key_t cle;
pid=getpid();
//struct connect identite;
struct msgbuf message;
struct msgbuf messagercv;
printf("debut client \n");
int i;
if(strcmp(argv[1],"-p")==0) // premier argument -p
{
printf("Pseudo : %s\n",argv[2]);
}
cle=ftok("/Users/Joke/Documents/cours/M1/Systeme/projet/CLE",'a'); // création de la clef
msqid =msgget(cle,0666);
if (msqid == -1)
{
perror("Erreur creation de file\n");
exit(EXIT_FAILURE);
}
// envoie un message de connexion
message.mtype=1;
message.pid=getpid();
message.mtext[0]='\0';
write= msgsnd(msqid, &message,sizeof(struct msgbuf),0);
if (write != 0) // erreur dans l'envoie du message de connexion
{
perror("Erreur envoi message\n");
exit(EXIT_FAILURE);
}
// FORK
pid_t pidfork=fork();
if(pidfork==0) // je suis dans le fils
{
while(1)
{
int read;
printf("lecture");
read=msgrcv(msqid,&messagercv,sizeof(struct msgbuf),0,0);
if (read == -1)
{
perror("Erreur de lecture dans la file\n");
exit(EXIT_FAILURE);
}
printf("%s",messagercv.mtext);
}
}
else // je suis dans le père
{
while(1){
printf("test :%d",test);
message.mtype= 2; // si = 0 ca plante -> invalid argument
message.pid=getpid();
char mess[158]; // message contenant le pseudo et le message
char mes[128];
printf("Tapez une phrase : \n");
fgets(mes, sizeof(mes), stdin);
mess[0] = '\0';
strcat(mess,argv[2]);
strcat(mess," : ");
strcat(mess,mes);
strcpy(message.mtext,mess);
write= msgsnd(msqid, &message,sizeof(struct msgbuf),1);
if (write != 0)
{
perror("Erreur envoi message\n");
exit(EXIT_FAILURE);
}
}
}
} |
Partager