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
|
#include<sys/types.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/msg.h>
#include<sys/ipc.h>
#include <string.h>
int main()
{
//-----------------------------------------------------------------------------------------------//
struct msgbuf_user1
{
long mtype;
char num[5];
int num_comp;
};
key_t cle;
int message, receive, nb_mess, temp_attente, i, j;
char tab[6][2][20];
char recep[20][2][20];
strcpy(tab[0][0], "Airbus 340");
strcpy(tab[1][0], "Boeing 747");
strcpy(tab[2][0], "Fokker");
strcpy(tab[3][0], "Embraer Brasilia");
strcpy(tab[4][0], "Jet Stream");
strcpy(tab[0][1], "Air France");
strcpy(tab[1][1], "Ryan Air");
strcpy(tab[2][1], "American Airlines");
strcpy(tab[3][1], "Air Canada");
strcpy(tab[4][1], "Japan air");
struct msqid_ds file_attente;
struct msgbuf_user1 recoit;
//-----------------------------------------------------------------------------------------------//
cle = ftok("/home/botzung/Cours/Unix/IPC/sem12",12345);
if(cle == -1)
{
printf("Problème de cle\n");
sleep(5);
exit(-1);
}
else
printf("\nCle : %x\n", cle);
//-----------------------------------------------------------------------------------------------//
while(1)
{
recoit.num[0] = '0';
for(j = 0; j <= file_attente.msg_qnum; j++)
{
message = msgget(cle, IPC_CREAT | 0666);
receive = msgrcv(message, &recoit, sizeof(recoit), recoit.mtype, IPC_NOWAIT);
msgctl(message, IPC_STAT, &file_attente);
switch (recoit.num[0])
{
case '1' : strcpy(recep[j][0], tab[0][0]);break;
case '2' : strcpy(recep[j][0], tab[1][0]);break;
case '3' : strcpy(recep[j][0], tab[2][0]);break;
case '4' : strcpy(recep[j][0], tab[3][0]);break;
case '5' : strcpy(recep[j][0], tab[4][0]);break;
}
switch (recoit.num[1])
{
case '1' : strcpy(recep[j][1], tab[0][1]);break;
case '2' : strcpy(recep[j][1], tab[1][1]);break;
case '3' : strcpy(recep[j][1], tab[2][1]);break;
case '4' : strcpy(recep[j][1], tab[3][1]);break;
case '5' : strcpy(recep[j][1], tab[4][1]);break;
}
}
if(recoit.num[0] != '0')
{
printf("Id du message : %d\n\n", message);
switch (recoit.num[0])
{
case '1' : printf("Avion ajouter : Airbus 340\n");break;
case '2' : printf("Avion ajouter : Boeing 747\n");break;
case '3' : printf("Avion ajouter : Fokker\n");break;
case '4' : printf("Avion ajouter : Embraer Brasilia\n");break;
case '5' : printf("Avion ajouter : Jet Stream \n");break;
}
switch (recoit.num[1])
{
case '1' : printf("Compagnie : Air France \n");break;
case '2' : printf("Compagnie : Ryan Air \n");break;
case '3' : printf("Compagnie : American Airlines \n");break;
case '4' : printf("Compagnie : Air canada \n");break;
case '5' : printf("Compagnie : Japan air \n");break;
default : printf("Aucun ajout\n");
}
sleep(1);
for(i = 13; i >= 0; i--)
{
if(i > 2)
printf("\rTemps restant avant décollage : %d\n", i-3);
else
printf("\rTemps restant avant décollage : --");
printf("\rTemps restant avant prochain décollage : %d\n", i);
printf("Nombres d'avions en attente : %d\n\n", file_attente.msg_qnum);
sleep(1);
system("clear");
}
}
}
} |
Partager