Unix, key, msgget

0

Piszę aplikację klient - serwer w C wykorzystując IPC.
Projekt praktycznie jest już skończony, jednak nie mogę uporać się z jednym problemem.

Klient komunikuje się z serwerem za pomocą kolejki komunikatów w tworząc kolejkę i wysyłając / odbierając wiadomości za pomocą funkcji msgsnd() msgrcv();

 
long klucz1 = 22335566;
long klucz2 = 11889977;
int mid1 = msgget(klucz1 ,0666 | IPC_CREAT); //klient nr 1
int mid2 = msgget(klucz2 ,0666 | IPC_CREAT); //klient nr 2
msgrcv(mid2,&wiadomosc, sizeof(wiadomosc.mtext), 2, IPC_NOWAIT); 

To z reguły działa.
Problem pojawia się gdy zrestartuję system (Debian) i uruchomię aplikację. Wtedy wartość mid1 lub mid2 (losowo) ustawia się na 0 nie wiedzieć czemu i całość przestaje działać. Muszę zmienić w kodzie wartości kluczy i na nowo skompilować całość. Wtedy aplikacja działa, aż do ponownego restartu systemu. Gdzie może leżeć problem?
Wujek sugeruje, abym do tworzenia kluczy używał ftok(). Bardzo chętnie, ale skąd mam wiedzieć w jakim miejscu użytkownik zainstaluje mój program (a jest to pierwszy argument ftok() - sciezka).

Taki sam problem opisany w jez. ang. : http://cpp.canbal.com/view.php?sessionid=YxmecHMrfvV9cm4uwCWUB57F0q79L29%2BkWFHJQRebJg%3D
Też ktoś nie znalazł rozwiązania.

0

Kombinowanie z ftok() nie przyniosło niczego. Nadal jest ten sam problem.

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