Funkcje z biblioteki statycznej dołączanej do programu
int shmCreate(int id,int size)
{
key_t klucz;
klucz=ftok(".",id);
int shmid;
shmid=shmget(klucz,size,IPC_CREAT|0666);
if(shmid==-1)
{
perror("Blad przy shmCreat\n");
exit(1);
}
else
printf("Utworzono pamiec o identyfikatorze %d i rozmiarze %d\n",shmid);
return shmid;
}
void* shmAt(int shmid){
char *buf;
buf=shmat(shmid,NULL,0);
if(*buf==-1){
perror("Blad funkcji shmAt");
exit(4);
}
return buf;
}
Poczatek Algorytmu petersona , część w której tworzymy zmienne dzielone .
int main ()
{
srand(time(0));
/* Zmienne dzielone */
int* kolej; // Czyja kolej do wejscia do sekcji krytycznje
int* flaga[2]; // Chęć wejscia do sekcji krytycznej
/* Inicjujemy zmienne współdzielone */
int shmid;
shmid = shmCreate( 11 , 64 );
kolej = (int*)shmAt(shmid); // kolej
*kolej = 0 ; // Proces który będzie wchodził do sekcji krytycznje to proces 0
printf("Kolej");
///////////////
shmid = shmCreate(12 , 64 );
flaga[0] = shmAt(shmid);
*flaga[0] = 0 ; // Brak checi wejscia
/////////////
shmid = shmCreate(13 , 64 );
flaga[1] = shmAt(shmid);
*flaga[1] = 0; // Brak checi wejscia
Podczas kompilacji jest zwracana kilka warningow(cast to pointer from integer off difrent size )
Gdy uruchamiam program, dochodzi do naruszenia ochrony pamięci.
Zgaduję, że jest coś nie tak z linijką: kolej = (int*)shmAt(shmid); // kolej
Co powinienem poprawić ?