Witam, mam taki problem, że nie wykonuje mi się funkcja
exit(0)
Program wiesza się po usunięciu dowiązania, nie wiem dlaczego.
Wynik programu:
Utworzono pamiec dzielona
Utworzono dowiazanie....!!
Semafor opuszczony. Jego wartosc to: -1
Utworzono pamiec dzielona
Utworzono dowiazanie....!!
Wszystko zostalo przeslane..
------------------------------ KONSUMENT ---------------------------------------
Usunieto dowiazanie..
--> teraz powinna się wykonać funkcja exit(0)
Po nacisnieciu klawiszy ctrl + c
Utworzono pamiec dzielona
Utworzono dowiazanie....!!
Semafor opuszczony. Jego wartosc to: -1
Utworzono pamiec dzielona
Utworzono dowiazanie....!!
Wszystko zostalo przeslane..
------------------------------ KONSUMENT ---------------------------------------
Usunieto dowiazanie..^Cmake: *** wait: Brak procesów potomnych. Stop.
make: *** Oczekiwanie na niezakończone zadania....
make: *** wait: Brak procesów potomnych. Stop.
Funkcja usuwająca dowiązanie:
void usun_dowiazanie(void *id_pamieci)
{
if(shmdt(id_pamieci) == -1)
{
perror("Nie mozna usunac dowiazania..");
exit(1);
}
else
printf("Usunieto dowiazanie..");
}
Petla z konsumenta:
while(1)
{
licznik = 0;
while(licznik < rozmiar_jednostki) //Przenosimy dane(tekst) ze struktury do tablicy
{
tablica[licznik] = wsk_struktury1 -> b[wsk_struktury1 -> j][licznik];
printf("%c",tablica[licznik]); //do pliku
if(tablica[licznik] == '\0')
{
printf("Wszystko zostalo przeslane..\n");
if(write(zapis,tablica,licznik) == -1) /*Zapisujemy tekst do pliku*/
{
perror("Blad zapisu\n");
exit(1);
}
printf("------------------------------ KONSUMENT ---------------------------------------\n");
usun_dowiazanie(wsk_struktury1);
exit(0);
printf("------------------------------ KONSUMENT ---------------------------------------\n");
}
licznik++;
}
if(write(zapis, tablica, rozmiar_jednostki) == -1) //zapisanie tekstu do pliku
{
perror("Blad zapisu..\n");
exit(1);
}
//printf("Opuszczam semafor PELNY\n");
opusc_semafor(identyfikator_semafor, 1);
wsk_struktury1 -> j = ((wsk_struktury1 -> j ) +1 ) % rozmiar_bufora;
//printf("Podniesiono semafor Pusty\n");
podnies_semafor(identyfikator_semafor,0);
}