Author Topic: OS - IPC - zdielana pamät  (Read 2604 times)

pinko

  • Guest
OS - IPC - zdielana pamät
« 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 ?

Pulsatrix

  • Newbie
  • *
  • Posts: 8
    • View Profile
Re: OS - IPC - zdielana pamät
« Reply #1 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.

tino8

  • Hero Member
  • *****
  • Posts: 1093
    • View Profile
Re: OS - IPC - zdielana pamät
« Reply #2 on: 02.04.2013, 04:37:37 »
ci boha, nechcel by som pracovat s niekym kto toto stvoril


karamel je cukr co se uz neuzdravi!