我正在使用一个c进程来侦听一个串口并将它发送给一个java程序来处理数据。在阅读之前,我是否必须先取消一个fifo链接?
我运行了c程序,它调用了mkfifo()
,它阻塞了,等待java程序打开另一端。
一旦java程序打开另一端,c程序就进入一个循环,从串口读取数据并用文件描述符调用write(fd)
。
直到我杀死C进程或者c进程调用unlink()
,java程序才会获取数据。
这是传递数据的唯一方法吗?如果我想保持它打开,我必须使用消息队列吗?
从我的研究看来,write
似乎没有被缓冲,所以我不必为fflush
做任何事情,因为如果我使用的是文件指针,但为什么它不发送?
如果C程序正在使用write()写入FIFO,那么数据应该准备好供Java程序读取,问题是“什么是Java程序在做“?您可以通过使用C程序来读取FIFO而不是Java来证明这一点;例如,运行'cat/path/to/FIFO'来读取它。您不应该需要取消链接FIFO。您可能需要重新打开它。如果您正在阅读并且没有作者离开,您需要关闭并重新打开,然后才能获得更多数据。如果你正在写作,可能会有类似的问题。 –
你是对的,猫的作品,所以它可能是java的结局。当我有机会看到发生了什么时,我会看看它 –