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
Asynchroniczna komunikacja między programami/skryptami
- dawwin
- 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
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
Nie pomagam na PW
- borzole
- 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
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
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
-
- 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
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ą.dawwin pisze:W C możesz użyć funkcji select()...
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 21 gości