Ho aggiunto i controlli
BRisorsa actual = risorse[segnaposto];
int durata = length(*actual.interessati)*3+1;
printf("DURATA %d\n", durata);
idshm = shmget(IPC_PRIVATE, sizeof(Tao), IPC_CREAT|0666);
if (idshm > 0) {
printf("%d\n", idshm);
Tao* mytao = (Tao *)shmat(idshm, NULL, 0);
if (mytao > 0) {
printf("1 -%s-\n", actual.n);
//sprintf(mytao->risorsa, "%s", actual.n);
printf("2\n");
int k;
printf("3\n");
/*for (k=0; k<OFFERTE_SALVATE_MAX; k++) {
printf("4\n");
mytao->offerte[k].pid = 0;
mytao->offerte[k].q = 0;
mytao->offerte[k].ou = 0;
}*/
printf("5\n");
idsem = semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT);
printf("6\n");
union semun arg;
arg.val = 1;
semctl(idsem, 0, SETVAL, arg);
printf("7\n");
P(idsem, 0);
while (length(*actual.interessati)) { //avvisa interessati
Item destinatario = pop(actual.interessati);
BMessage mymessage;
mymessage.tipo = destinatario.pid;
CRisorsa myrisorsa;
sprintf(myrisorsa.n, "%s", actual.n);
myrisorsa.q = actual.q;
myrisorsa.b = actual.cu;
mymessage.risorsa = myrisorsa;
mymessage.idshm = idshm;
mymessage.idsem = idsem;
msgsnd(idmsg, &mymessage, sizeof(BMessage)-sizeof(long), 0);
}
sleep(3);
V(idsem, 0);
sleep(durata);
P(idsem, 0);
printf("8\n");
TMessage tmessage;
tmessage.tipo = getppid();
tmessage.sender = getpid();
printf("9\n");
//tmessage.tao = getTaoFromPointer(mytao);
//tmessage.tao = *mytao;
msgsnd(idmsgpadre, &tmessage, sizeof(TMessage)-sizeof(long), 0);
printf("10\n");
} else printf("ERRORE shmat\n");
} else printf("ERRORE shmget\n");
terminacorrettamentefiglio();
inoltre ho notato che compilando il compilatore mi da un warning:
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
Tao* mytao = (Tao *)shmat(idshm, NULL, 0);