scusate per il titolo, ma non mi veniva un modo migliore per chiamarlo.
provo a spiegarmi meglio:
all'inizio faccio pongo temp nella memoria condivisa con shmat() poi c'è il ciclo while con il quale scandisco tutta la memoria(infatti utilizzo strcmp(temp,"")!=0).
il problema mio è if(strcmp(temp,"_")==0)
Mi è stato detto da un ragazzo che programma in c che "_" indica la fine di un messaggio che è stato inserito attraverso il metodo postAMessage().
Un messaggio è composto dai campi "Oggetto e testo" ed è composto da 2 array di caratteri di taglia TAGLIA_OBJ TAGLIA_TXT.
Quindi per spostarmi da un messaggio all'altro incrementerò temp così:
temp += TAGLIA_OBJ + TAGLIA_TXT;
Spero di essere stato un pò più chiaro...scusate ancora
codice:
void postAMessage(int ds_shm, int ds_sem){
int letti;
int ret;
int index = 1;
char* temp;
struct sembuf oper;
/*Blocco i semafori*/
oper.sem_num = 0;
oper.sem_op = -1;
oper.semflg = 0;
ret = semop(ds_sem, &oper, 1);
oper.sem_num = 1;
oper.sem_op = -1;
oper.sem_flg = 0;
ret = semop(ds_sem, &oper, 1);
temp = shmat(ds_shm, NULL, SHM_W);
if(temp == (char*) -1){
printf("errore nella call shmat\n");
exit(-1);
}
while(strcmp(temp,"")!=0){
if(strcmp(temp, "_") == 0 || index > NUM_MAX_MSG)
break;
else if(index == NUM_MAX_MSG){
/*Sblocco i semafori*/
oper.sem_num = 0;
oper.sem_op = 1;
oper.sem_flg = 0;
ret = semop(ds_sem, &oper, 1);
oper.sem_num = 1;
oper.sem_op = 1;
oper.sem_flg = 0;
ret = semop(ds_sem, &oper, 1);
printf("Bacheca piena, riprovare più tardi\n");
}
else{
temp += TAGLIA_OBJ + TAGLIA_TXT;
index ++;
}
}
printf("Oggetto: \n");
scanf("%s\n", &messaggio.obj);
strcnpy(temp,messaggio.obj,TAGLIA_OBJ);
temp += TAGLIA_OBJ;
printf("Testo: \n");
scanf("%s\n",&messaggio.txt);
strncpy(temp,messaggio.txt, TAGLIA_TXT);
temp += TAGLIA_TXT;
/*Sblocco i semafori*/
oper.sem_num = 0;
oper.sem_op = 1;
oper.sem_flg = 0;
ret = semop(ds_sem, &oper, 1);
oper.sem_num = 1;
oper.sem_op = 1;
oper.sem_flg = 0;
ret = semop(ds_sem, &oper, 1);
exit(0);
}