2016-08-30 12 views
5

Chcę ciągle wykonywać program C na moim komputerze. Nie musi jednak "robić" niczego, dopóki nie utożsamia się z event.Czy istnieje odpowiedni sposób na napisanie programu, który działa nieprzerwanie?

Na przykład program C można zapisać przy pomocy pętli do while, która nigdy nie zostanie zamknięta. Wewnątrz pętli może występować warunek if else, który nasłuchuje na event. Powiedzmy "if plik istnieje w katalogu, następnie otwórz plik i zrób coś, else zrób sobie przerwę i sleep(60) na minutę".

Oczywiście ta funkcja może być realizowana poza programem C. Mógłbym uruchomić ten sam pomysł powyżej w skrypcie powłoki ... "if plik istnieje w katalogu, a następnie uruchomić program C, else zrobić sobie przerwę i sleep(60) na minutę". Mógłbym też napisać skrypt powłoki, aby wykonać program C, jeśli plik istnieje i uruchomić program powłoki z crontab lub innym programem planującym.

Jeśli nie uruchomię sleep lub ustawię crontab na bardzo wysoką częstotliwość, to oczywiście mój czas odpowiedzi ulegnie poprawie. Chociaż byłoby to idealne, mam wątpliwości, że jest to bezpieczny i właściwy sposób, aby to zrobić. Zasadniczo chcę, aby mój program był zawsze gotowy do działania ... pojawia się event, do dzieła!

Ponieważ nigdy nie zaimplementowałem takiego programu, moje pytanie brzmi, czy istnieje odpowiedni i bezpieczny sposób na stworzenie "detektora zdarzeń" obsługującego ten typ funkcjonalności? C vs podejście powłoki? Inne pomysły?

+2

To zależy od wydarzenia. 'man select' oraz' man epoll'. –

+4

Jeśli chodzi o ogólne oglądanie katalogu, a nie o istnienie określonego pliku, zobacz także np. ['man inotify'] (http://man7.org/linux/man-pages/man7/inotify.7.html). Może być użyty do sprawdzenia, czy określone pliki zostały utworzone w katalogu. –

+0

@WilliamPursell Trzymanie się z kontekstem mojego pytania, wydarzenie byłoby "istnieniem pliku". Sprawdzę każdą z nich. – ThatsRightJack

Odpowiedz

1

Tym, czego naprawdę chcesz, jest komunikacja między procesami. za pomocą funkcji "uśpienia()" i sprawdź, czy warunek jest spełniony, ale nie jest to optymalny sposób pod względem zużycia procesora.

Nie bo tam kilku sposobów komunikacji między procesami, znam te:

  1. rura
  2. pamięć współdzielona
  3. gniazdo
  4. Fifo

dobrze jest zacząć rurę : można tego użyć, gdy masz 2 programy i chcesz, aby program # 1 czekał na jakieś zdarzenie z programu # 2. Znalazłem przykład here, ale jest wiele innych w google.

po tym będę kontynuować z gniazda. Jednym z przykładów jest here, ale w sieci jest ich jeszcze więcej.

do dalszego czytania Mogę ci doradzić, abyś odnalazł książkę "Advanced Linux Programming" w rozdziale "Komunikacja międzyprocesowa".

Powiązane problemy