TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach

FEI archív 2012/2013 => 2. ročník => Topic started by: pinko on 31.03.2013, 23:12:57

Title: OS - IPC - zdielana pamät
Post by: pinko on 31.03.2013, 23:12:57
Zdravim. Mohol by mi niekto prosim vysvetlit tento kusok kodu?

Code: [Select]
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 ?
Title: Re: OS - IPC - zdielana pamät
Post by: Pulsatrix on 01.04.2013, 23:59:43
(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.
Title: Re: OS - IPC - zdielana pamät
Post by: tino8 on 02.04.2013, 04:37:37
ci boha, nechcel by som pracovat s niekym kto toto stvoril