2017-02-17 18 views
0

Я использую процесс c для прослушивания последовательного порта и отправки его в программу java для обработки данных.Должен ли я отсоединить фило, прежде чем я смогу его прочитать?

Я запускаю программу c, которая делает вызов mkfifo(), она блокирует, ожидая, что программа java откроет другой конец.

Как только программа java открывает другой конец, программа c входит в цикл, считывает из последовательного порта и вызывает write(fd) с файловым дескриптором.

Программа java не получает данные, пока я не убью процесс C, или процесс c вызовет unlink().

Это единственный способ передачи данных? Должен ли я использовать очередь сообщений, если я хочу сохранить ее открытой?

Из моего исследования выясняется, что write не буферизирован, поэтому мне не нужно ничего делать, как fflush, если бы я использовал указатель на файл, но тогда почему он не отправляется?

+0

Если программа C записывает в FIFO с помощью функции 'write()', тогда данные должны быть готовы к чтению программы Java, и проблема заключается в том, что такое Java программа делает "? Вы можете продемонстрировать это, используя программу C для чтения FIFO вместо Java; например, запустите 'cat/path/to/FIFO', чтобы прочитать его. Вам не нужно отключать FIFO. Возможно, вам нужно будет снова открыть его. Если вы читаете и нет авторов, вам нужно закрыть и снова открыть, прежде чем вы получите больше данных. Подобная проблема может возникнуть, если вы пишете. –

+0

Вы правы, кошка работает, поэтому, вероятно, конец java. Я посмотрю на это, когда у меня появится шанс и посмотрю, что там происходит –

ответ

-1

Вы связали, чтобы установить флаг O_ASYNC на считываемый конец?

+0

Извините, хотя я комментирую ... не отвечая ... – borodin

0

Оказалось, что я использовал bufferedreader.readLine(), а не только read. Смена чтения с помощью буфера исправлена.