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