[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