Komunikacja z daemonem

Komunikacja z daemonem
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
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


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
edytowany 1x, ostatnio: Rev
RE
Nie umieszczaj tagów w tytule wątku.
vpiotr
Musicie przyznać, że ten wątek ma jeden zabawny aspekt... prowokacja? @Rev: karolinaa / karol chce wykonać jakąś interakcję z daemonem i nomen omen demon się odzywa :)
kult
  • Rejestracja:prawie 22 lata
  • Ostatnio:ponad rok
1
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
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.


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
edytowany 1x, ostatnio: karolinaa
fasadin
sciemniasz, bo osoba ze zdjęcia ma na imię Oliwia
vpiotr
Niezależnie od intencji po prostu śmieszna sytuacja. To pewnie wina tej fotki, którą miałaś... Ale mam nadzieję że znajdziesz sposób na rozwiązanie swojego problemu. GL!
RE
i jest z Przemyśla. także bez przeginania, bo się pożegnamy.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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 :)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
RE
ad. facetów z żeńskimi nickami: twoje przypuszczenia są uzasadnione, bo w tym przypadku tak właśnie jest.
n0name_l
ad. Stevens w 1szej czesci Network Programming sa za to opisane wszystkie zalecane sposoby komunikacji z daemonami ;>
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
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ść.


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
flowCRANE
"Nie wiem skąd wy to wszystko wiecie o.0" - trzeba umieć korzystać z Google;
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
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.

kult
  • Rejestracja:prawie 22 lata
  • Ostatnio:ponad rok
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.

KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
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


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)