[so] Probleme memorie partajata tema 2 linux

Mirea Bogdan-Stefan b.mirea at yahoo.com
Tue Apr 3 13:06:20 EEST 2012


Stanciu Alexandru <the_marian_2006 at ...> writes:

> 
> 
> Nu reusesc sa afisez si eu mesajul pe care clientul il pune in memoria
partajata pentru a fi decriptat. Cand primesc un mesaj de la client, in gateway
pur si simplu deschid memoria partajata, o trunchez la dimensiunea specificata
in mesaj si apoi ma mapez pe ea. Problema e ca eu apelez clientul cu: ./client
ceva rest3 1 -1 si in gateway afisez:
> cout << "size cool " << ((int*)mem)[0] << endl;for(int j = 1 ; j <=
((int*)mem)[0] ; j++)
> {    cout << ((char*)mem)[j] << " -> ";
> }cout<<endl;
> 
> si-mi afiseaza numai prostii:
> 
> rest319size cool 9 ->  ->  -> b -> W -> F -> t -> Y -> Q ->  unde 19 este
>  dimensiunea memoriei partajate specificata in mesaj.
> 
> Care ar putea fi problema? Nu am inteles eu bine enuntul? Am deschis memoria
partajata cu si fara flagul O_CREAT si aceeasi problema.
> 
> 
> 
> _______________________________________________
> http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii

Salut,

trebuie sa faci for de la 4. Int-ul ocupa 4 octeti, nu 1.
Folosit ca pointer, da poti sa faci ((int*)mem)[0] pt ca o sa iti ia el automat,
fiind castat la int, primii 4 octeti, dar restul mesajului este de tip char* si
char-ul are dimensiune 1.

Tu cand incerci sa iti afisezi cu for de la 1, o sa ai un zero prin primii 4
octeti reprezentati de int.

cu:

for(int j = 4 ; j <= ((int*)mem)[0] ; j++)
{  
  printf("%c",((char)mem)[j]);
}printf("\n");


o sa fie totul OK.

Si ai grija, fa in cout cast la char nu la char*




More information about the so mailing list