Jeśli mam program, który tworzy i próbuje otworzyć nazwaną potok za pomocą mkfifo, w jaki sposób mogę otworzyć potok do czytania lub pisania bez blokowania?Jak wykonać niezablokowanie fopen na nazwanej potoku (mkfifo)?
W szczególności piszę program w języku C, który można uruchomić z gui lub bez niego (napisany w Javie).
W programie C, I pomyślnie utworzyć nazwanych potoków za pomocą mkfifo, jednak kiedy robię
FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/
fopen nie zwraca aż GUI otwiera że rura na piśmie. Chcę, aby ta rura była gotowa do odczytu raz (jeśli) GUI zdecyduje się na nią napisać - będę umieszczał deskryptor pliku w wywołaniu select(). Rozsądnie jest oczekiwać, że interfejs GUI języka Java może nigdy nie zostać uruchomiony, więc nie mogę na nim polegać, aby otworzyć drugi koniec rury w dowolnym punkcie lub nawet w ogóle.
Będę też miał drugą rurę otwartą do pisania i zakładam, że będę miał ten sam problem. Ponadto nie mogę ustawić O_NONBLOCK na rurze wyjściowej, która nie ma czytnika.
Wszelkie sugestie?
(To działa na systemie Linux)
Czy trzeba otworzyć rurę wyjściową przed uruchomieniem select() na rurze wejściowej? –
@tinkertim - Przypuszczam, że technicznie nie - ustawiłem oba w funkcji konfiguracji, ale mogłem najpierw ustawić wyjściową rurę, a następnie zadzwonić wybrać, dlaczego? – Zxaos