Semafory

Odpowiedz Nowy wątek
2019-04-13 01:54
0

Zaczynam pisać program z semaforami i na początku natrafiłem na pewien problem.
Chciałem stworzyć semafor, a następnie wypisać jego aktualną wartość.
Mój kod wygląda tak:

    sem_t *sem1;
    int *value;
    sem1=sem_open("semafor", O_CREAT | O_EXCL, 0644, 1);
    sem_getvalue(sem1, value);
    printf("Wartosc semafora to %d\n", value);

I tutaj moim problemem jest to, że po pierwsze przy kompilacji wyskakuje ostrzeżenie przy ostatniej linijce, dokładniej dotyczące "%d" (kompilator sugeruje "%ls"). Po uruchomieniu programu nic właściwie się nie dzieje, ponieważ wyskakuje komunikat o naruszeniu ochrony pamięci i oczywiście jego zakończenie.
Jest to mój pierwszy kontakt z semaforami, czytałem o tym dużo, jednak nie potrafię poradzić sobie z tym problemem, także proszę o wytłumaczenie, na czym polega mój błąd :)
Z góry dziękuję za pomoc :)

Pozostało 580 znaków

2019-04-13 23:28
0

Całość wygląda tak:

    sem_t *sem1;
    int value;
    sem1=sem_open("semafor", O_CREAT | O_EXCL, 0644, 1);
    printf("Tekst\n");
    sem_getvalue(sem1, &value);
    printf("Kolejny tekst\n");
    printf("Wartosc poczatkowa semafora to %d\n", value);
    sem_close(sem1);

"Tekst" się wyświetla, natomiast "Kolejny tekst" już nie

edytowany 2x, ostatnio: hidden55, 2019-04-13 23:29

Pozostało 580 znaków

2019-04-13 23:45
1

Jeden z błędów zwracanych przez funkcję:

EEXIST Both O_CREAT and O_EXCL were specified in oflag, but a semaphore with this name already exists.

http://man7.org/linux/man-pages/man3/sem_open.3.html
Dodaj sprawdzanie zwracanych wartości.

Pozostało 580 znaków

2019-04-14 01:21
0

Dobra, już działa, dziękuję bardzo za pomoc :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0