| 12
 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