Wymiana danych pomiędzy procesami

0

Witam w jaki sposób można wymieniać dane pomiędzy procesami? Ponieważ stworzyłem 2 procesy za pomocą fork() jednak nie mogę wymienić pomiędzy nimi danych za pomocą zmiennych gdyż wartość ich się nie zmienia.

0

RPC, pamięć współdzielona, sockety, stdin<->stdout itp. Zależy od platformy, rodzaju wymienianych danych, przeznaczenia, upodobań, plam na księżycu...

1

Najprościej to chyba użyć potoków - specjalny rodzaj plików. Jest od tego chyba funkcja pipe(): http://en.wikipedia.org/wiki/Pipeline_(Unix)#Creating_pipelines_programmatically .

0

A możecie przybliżyć mi to jak to może wyglądać

0

Co dokładnie?
Nawet najprostsza wymiana danych poprzez podpięcie się do stdin jednego z procesów wymaga zapoznania z chociażby select(). Trudno pisać książkę na forum.
W sporym skrócie masz chociażby tutaj: http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_14.html

Albo inaczej. Informacja, której poszukujesz to "Interprocess Communication" (komunikacja międzyprocesowa), lub w skrócie "IPC". Googlaj pod tym kątem.

0

W ogóle może przedstawię kod programu, może wtedy będzie łatwiej dość jaka metodą najlepiej
main.cpp :

http://4programmers.net/Pastebin/1002

security.h :

http://4programmers.net/Pastebin/1001

0

Ojjjj.... Zamiast wielgachnego kodu bez komentarzy i informacji co on robi napisz jakie dane chcesz wymieniać, z jaką częstotliwością, jak duże one są... ogólną charakterystykę. Wtedy będziemy mogli Ci doradzić jakieś rozwiązanie i może podeprzeć to jakimś kodem. Bez tego możesz liczyć jedynie na listę możliwości do wyboru.

0

Dokładniej. Zależy mi na wymianie zmiennej session tak aby określona wartość powodowała zamknięcie procesu związanego z sesjami bazy danych. Obecnie przy uruchomieniu funkcji End_session() program się kończył lecz proces związany z sesjami dalej pracował a chciałbym żeby równocześnie procesy zostały zakończone po uruchomieniu funkcji End_session()

0

IPC w takim przypadku to armata na muchę. Skoro bawisz się widelcem, to wysyłaj do podprocesów sygnał (np. SIGUSR1), na który one odpowiedzą zakończeniem pracy.

0

Dzięki wszystkim za podpowiedz. Udało mi się rozwiązać ten problem. Oto rozwiązanie , pobrałem z procesu dziecka pid i potem nadałem sygnał zakończenia.

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