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.
Wymiana danych pomiędzy procesami
- Rejestracja: dni
- Ostatnio: dni
- Postów: 22
- Rejestracja: dni
- Ostatnio: dni
- Postów: 166
RPC, pamięć współdzielona, sockety, stdin<->stdout itp. Zależy od platformy, rodzaju wymienianych danych, przeznaczenia, upodobań, plam na księżycu...
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: XML Hills
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 .
- Rejestracja: dni
- Ostatnio: dni
- Postów: 22
A możecie przybliżyć mi to jak to może wyglądać
- Rejestracja: dni
- Ostatnio: dni
- Postów: 166
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 22
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 :
- Rejestracja: dni
- Ostatnio: dni
- Postów: 166
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 22
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()
- Rejestracja: dni
- Ostatnio: dni
- Postów: 166
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 22
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.