Komunikacja z daemonem

0

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

0

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.

1

@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 :)

0

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ść.

0

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.

1
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.

0

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

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