Code di messaggi c linux esercizio cameriere

di il
2 risposte

Code di messaggi c linux esercizio cameriere

Salve, mi presento mi chiamo Fabio e frequento una scuola con indirizzo informatico.

Devo fare il seguente programma, ma non riesco a farlo correttamente:

Implementare il lavoro in una pizzeria con un programma che crei la coda di messaggi e svolga il compito di pizzaiolo,ed un altro programma da avviare più volte ossia i camerieri (max 10). Ogni cameriere invia un messaggio al pizzaiolo di tipo 10+numero_tavolo, contenente il numero del cameriere,il numero del tavolo (tra 1 e 50), il numero della pizza (tra 1 e 30), il numero della bevanda(tra 1 e 10). L'ordinazione si completa con l'invio del numero di pizza = 0 INSERIRE DA TASTIERA TALI RICHIESTE! Il pizzaiolo legge dalla coda il primo messaggio e poi tutti gli altri, relativi a quel tavolo, fino a quello di completamento, quindi generi un attesa random (preparazione) stampi a video IL NUMERO DEL TAVOLO E DI PIZZE COMPLETATE inviando al cameriere un messaggio e poi passi alla successiva richiesta.

mi potete aiutare?

2 Risposte

  • Re: Code di messaggi c linux esercizio cameriere

    Premettendo che non si capisce niente e che il titolo non va bene, qual è la difficoltà in questo esercizio?
  • Re: Code di messaggi c linux esercizio cameriere

    Ciao, hai ragione scusa per non aver rispettato le regole.

    Non riesco a capire come si fà questo esercizio, ho fatto solo il cameriere così:

    #include<stdio.h>
    #include<errno.h>
    #include<sys/types.h>
    #include<sys/ipc.h>
    #include<sys/msg.h>
    #define MINT 1
    #define MAXT 50
    #define MINP 1
    #define MAXP 30
    #define MINB 1
    #define MAXB 10
    int main()
    { int Ncameriere;
    int msgid;
    struct msgbuf
    {
    long mtype; /* - tipo del messaggio; */ int cameriere;
    int tavolo;
    int pizza;
    int bibita;
    }
    sndbuf;
    printf("Inserire il numero del Cameriere\n"); scanf("%d",&Ncameriere);
    key_t key; key=ftok("/bin/ls",'b'); msgid = msgget(key,0666); if (msgid == -1) { printf("errore creazione coda di messaggi\n"); return -1; } else printf("\nMi collego alla coda di messaggi\n");
    do { //TAVOLO sndbuf.cameriere=Ncameriere; do { printf("\n>>>>>>>>>>CAMERIERE %d NUMERO TAVOLO (0=FINE):\n",Ncameriere); scanf("%d",&sndbuf.tavolo); }while((sndbuf.tavolo<0) || (sndbuf.tavolo>MAXT)); if (sndbuf.tavolo>0) { sndbuf.mtype=sndbuf.tavolo+10; //COMPILO L'ORDINE do { do { printf("\n\nNUMERO BEVANDA:\n"); scanf("%d",&sndbuf.bibita); }while((sndbuf.bibita<MINB) || (sndbuf.bibita>MAXB)); do { printf("\n\nNUMERO PIZZA (0=FINE):\n"); scanf("%d",&sndbuf.pizza); }while((sndbuf.pizza<0) || (sndbuf.pizza>MAXP)); //INVIO L'ORDINE AL PIZZAIOLO msgsnd(msgid,&sndbuf,sizeof(sndbuf),0); }while(sndbuf.pizza!=0); } }while(sndbuf.tavolo!=0); msgctl(msgid,IPC_RMID,0);
    return 0;
    }

    scusate per la formattazione.
Devi accedere o registrarti per scrivere nel forum
2 risposte