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.
RPC, pamięć współdzielona, sockety, stdin<->stdout itp. Zależy od platformy, rodzaju wymienianych danych, przeznaczenia, upodobań, plam na księżycu...
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 .
A możecie przybliżyć mi to jak to może wyglądać
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.
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 :
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.
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()
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.
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.