Witam!
Piszę sobie prostego daemona w C dla Linuxa. Chciałabym wykonać jakąś interakcję z działającym daemonem np. spowodować zmianę wartości zmiennej. Jak to najlepiej wykonać (chciałabym aby było to ładne rozwiązanie)? Czytałam o Berkeley sockets (ale wydaje mi się to przerost formy nad treścią) oraz zwykłym pliku, który byłby interfejsem do komunikowania się z daemonem (np. daemon przy każdym wywołaniu sprawdza plik) - podobnie jak pliki w /proc/* , /sys/* przy jądrze Linux. Tylko hmm... nie mam zielonego pojęcia gdzie w Linuxie procesy mogą umieszczać takie pliki do komunikacji aby było ładnie i zgodnie ze sztuką. Ma ktoś jakieś przemyślenia w tej materii?
Pozdrawiam
- Rejestracja:prawie 12 lat
- Ostatnio:prawie 5 lat
- Lokalizacja:Warszawa
- Postów:1683

- Rejestracja:prawie 22 lata
- Ostatnio:ponad rok
- Rejestracja:prawie 12 lat
- Ostatnio:prawie 5 lat
- Lokalizacja:Warszawa
- Postów:1683
Miałam odpisać wcześniej, ale chciałam jeszcze doczytać na temat jakiś alternatyw tj. socketów oraz sygnałów. Są gdzieś jakieś przykłady wykorzystania tego dbus w C (nie mogę nigdzie znaleźć)?
Sygnały mi się podobają (bo są dość proste ;p) i wpływam wtedy na daemona np. "kill -USR1 $pid_daemona", ale przeczytałam, że nie powinno się tego do tego stosować ;/ Więc zostaje ten DBus i te sockety - tylko czy użycie ich lokalnie na tej samej maszynie nie będzie błędem w sztuce? Taki daemon-serwer i jakiś prosty klient do zarządzania nim?
Do vpiotr i Rev; myślałam, że zostanę poważnie potraktowana na takim forum. Skończyłam LO i dostałam się na studia. Dziewczyny nie mają prawa się tym zajmować? potrenować w wakacje przed wieczornym wyjściem z koleżankami do Arkadii po nowe Vansy? No właśnie, dziwie się takiemu stereotypowemu zachowaniu.

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
@karolinaa no offence, są tutaj też kobiety i chyba nie czują się dyskryminowane :) Po prostu często jest tu wysyp pseudo-kobiet (facetów z żeńskimi nickami), którzy liczą na to, że jak będą udawać kobietę i od razu 100 napalonych, samotnych koderów rzuci się im do pomocy ;]
Jeśli chodzi o twój problem:
- sygnały jak najbardziej są ok
- możesz też napisać program "klienta" który za pomocą socketów / sygnałów / pamięci współdzielonej będzie załatwiaj tą komunikację.
Poczytaj książkę pana Stevensa "Advanced Programming in the UNIX Environment", masz tam opisane chyba wszystkie dostępne mechanizmy komunikacji międzyprocesowej w unixach :)
- Rejestracja:prawie 12 lat
- Ostatnio:prawie 5 lat
- Lokalizacja:Warszawa
- Postów:1683
Książek jeszcze nie czytałam, ale zamierzam. Chyba zdecyduje się na sockety tzw. "Unix domain socket" - dość fajnie to działa, można się pobawić i ma duże możliwości. Stworzyłam nawet taki lokalny socket w /var/run/moj_socket ,aplikacja odpalona była z roota. Tylko co chcąc skorzystać z socketu przez klienta odpalonego z zwykłego użytkownika nie wychodziło (uprawnienia). Jak mogłabym wpływać na daemona odpalanego z roota, z poziomu klienta odpalanego z zwykłego użytkownika? Tak by każdy zwykły użytkownik mógł sterować jedną z funkcjonalności daemona? Jest to w ogóle wykonalne nie naciągając zasad UNIXa (przynajmniej używając socketów)?
PS fasadin, Rev: Nie wiem skąd wy to wszystko wiecie o.0. ?! xd Znaczy się wiem, ale jak potrafiliście do tego dojść.

"Nie wiem skąd wy to wszystko wiecie o.0"
- trzeba umieć korzystać z Google;

- Rejestracja:ponad 12 lat
- Ostatnio:ponad 4 lata
- Postów:2412
Ale jaki masz problem? Daemon tworzy socket, a klient, ktory chce nim sterowac sie z nim lacza i nastepuje zwykla wymiana danych O.o
Jak Ci tworzy socket z innymi prawami dostepu niz sobie zyczysz to masz chmod()
do zmiany uprawnien.
Nie widze w tym nic skomplikowanego.

- Rejestracja:prawie 22 lata
- Ostatnio:ponad rok
karolinaa napisał(a):
Stworzyłam nawet taki lokalny socket w /var/run/moj_socket ,aplikacja odpalona była z roota.
Nie uruchamiaj aplikacji z roota, jest to z wielu względów nie zalecane, a poza tym nie ma uzasadnienia by to robić :)
karolinaa napisał(a):
Jak mogłabym wpływać na daemona odpalanego z roota, z poziomu klienta odpalanego z zwykłego użytkownika? Tak by każdy zwykły użytkownik mógł sterować jedną z funkcjonalności daemona?
Stwórz grupę, dodaj do niej użytkowników, aby wszyscy mogli mieć dostęp do pliku.
start-stop-daemon pozwala na uruchomienie aplikacji z poziomu dowolnego usera (przełącznik --chuid). Tzn uruchamiając skrypt z roota, daemon uruchamiany jest z prawami innego użytkownika np.
- Rejestracja:prawie 12 lat
- Ostatnio:prawie 5 lat
- Lokalizacja:Warszawa
- Postów:1683
Właśnie mój daemon bawi się różnymi plikami do których tylko root ma dostęp. Chciałam jeszcze zrobić jakiegoś klienta dla zwykłych użytkowników. Sockety są dość fajne, ale czytam dalej o mechanizmach IPC. W internecie używając tego hasła można znaleźć ciekawe porównania. http://stackoverflow.com/questions/404604/comparing-unix-linux-ipc
vpiotr