2017-02-17 37 views
0

我正在使用一个c进程来侦听一个串口并将它发送给一个java程序来处理数据。在阅读之前,我是否必须先取消一个fifo链接?

我运行了c程序,它调用了mkfifo(),它阻塞了,等待java程序打开另一端。

一旦java程序打开另一端,c程序就进入一个循环,从串口读取数据并用文件描述符调用write(fd)

直到我杀死C进程或者c进程调用unlink(),java程序才会获取数据。

这是传递数据的唯一方法吗?如果我想保持它打开,我必须使用消息队列吗?

从我的研究看来,write似乎没有被缓冲,所以我不必为fflush做任何事情,因为如果我使用的是文件指针,但为什么它不发送?

+0

如果C程序正在使用write()写入FIFO,那么数据应该准备好供Java程序读取,问题是“什么是Java程序在做“?您可以通过使用C程序来读取FIFO而不是Java来证明这一点;例如,运行'cat/path/to/FIFO'来读取它。您不应该需要取消链接FIFO。您可能需要重新打开它。如果您正在阅读并且没有作者离开,您需要关闭并重新打开,然后才能获得更多数据。如果你正在写作,可能会有类似的问题。 –

+0

你是对的,猫的作品,所以它可能是java的结局。当我有机会看到发生了什么时,我会看看它 –

回答

-1

你有绑定在读取结束设置O_ASYNC标志吗?

+0

对不起,我虽然在评论...不回答... – borodin

0

原来我使用的是bufferedreader.readLine(),而不是read。修改为使用固定的缓冲区进行读取

相关问题