• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 

OS - IPC - zdielana pamät

Started by pinko, 31.03.2013, 23:12:57

« predchdzajce - alie »

pinko

Zdravim. Mohol by mi niekto prosim vysvetlit tento kusok kodu?


shared_memory = shmat(shmid, (void *)0, 0);
if (shared_memory == (void *)-1) {
fprintf(stderr, "shmat failed\n");
exit(EXIT_FAILURE);
}


ako mam chapat to (void *)-1 ?

Pulsatrix

(void*)-1 je typecast -1tky (implicitne integer constant)

-1 (integer) v dec je sizeof(int) * 8 jednotiek (bavime sa o complementarnom kode)

sizeof(int) * 8 (vacsinou 32) jednotiek v binary je v hex 0xFFFFFFFF

(void *) je typecast na adresu, takze volanie porovnavas s adresou 0xFFFFFFFF co je posledna adresa tvojej ramky (uvazujem 32bit architekturu s 4GB ram, toto moze byt inac nepresne)

shmget() ti vrati nejaku adresu v tvojej ramke, ktora je spravidla aligned na k * 2^n (k z ramsize() / 2^n) a (n z <1, 4>) tu adresu,

teda nikdy ti nevrati 0xFFFFFFFF validne, iba ak by volanie zlyhalo.

Je to hroza a strach, ruky od toho prec.

tino8

ci boha, nechcel by som pracovat s niekym kto toto stvoril


karamel je cukr co se uz neuzdravi!