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 ?
(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.
ci boha, nechcel by som pracovat s niekym kto toto stvoril