Asynchroniczna komunikacja między programami/skryptami

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
artur.sc
Sędziwy Jeż
Sędziwy Jeż
Posty: 63
Rejestracja: 09 kwie 2010, 14:18
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Asynchroniczna komunikacja między programami/skryptami

Post autor: artur.sc »

Witam

Mam program napisany w C oraz skrypt w bash.
Chcę, aby między programem a skryptem wymieniane były informacje.
Próbowałem do tego celu wykorzystać potoki nienazwane - ale działa to tak, że skrypt zatrzymuje się i czeka aż dostanie dane.
Mnie zależy na tym, aby skrypt sprawdził czy są dane, a jeśli ich nie ma dalej wykonywał swoją pracę.
W jaki sposób można to osiągnąć ?
Pozdrawiam,
Artur
Awatar użytkownika
dawwin
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 202
Rejestracja: 18 kwie 2009, 09:16
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Asynchroniczna komunikacja między programami/skryptami

Post autor: dawwin »

W C możesz użyć funkcji select(), bo wbrew pozorom może być używana nie tylko w przypadku gniazd. Albo ustawić deskryptor w tryb nieblokujący i normalnie wywoływać funkcję read(), która pobierze tyle danych, ile w danej chwili jest na łączu i zwróci liczbę pobranych bajtów lub -1 i ustawi odpowiednio zmienną errno, gdy danych nie będzie. Jeśli chcesz wykorzystać ten drugi pomysł to zapoznaj się z funkcją fcntl()
Moje programy - http://dawwin.users.sourceforge.net/
Nie pomagam na PW
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Asynchroniczna komunikacja między programami/skryptami

Post autor: borzole »

Komunikacja przez potoki nazwane (mkfifo) z tym, że włączana gdy nadejdzie sygnał przerwania.
Przykładowo to jest skrypt, który coś robi i po nadejściu sygnału przerwania wykonuje osobną funkcję, a po jej zakończeniu powraca do swojego zajęcia.
trap_server.sh
drugi skrypt pokazuje jak wysłać taki sygnał: trap_client.sh

Musisz teraz w miejsce funkcji przerwania wstawić skrypt do komunikacji:
pipe-server.sh
i pipe-client.sh
artur.sc
Sędziwy Jeż
Sędziwy Jeż
Posty: 63
Rejestracja: 09 kwie 2010, 14:18
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Asynchroniczna komunikacja między programami/skryptami

Post autor: artur.sc »

dawwin pisze:W C możesz użyć funkcji select()...
Generalnie zależy mi na tym, aby z C wysyłać dane do basha i aby to skrypt w bashu sprawdzał, czy coś zostało wysłane - więc opisane funkcje w tym konkretnym przypadku nic mi nie dają.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 25 gości