我有2个应用程序,一个用C编写,另一个用JAVA编写。让我们将这些应用程序称为“ C”和“ JAVA”。


C通过mkfifo创建一个命名管道(也尝试过mknod-与结果没有区别)
C通过子进程调用system()调用来启动JAVA应用程序,并传递给它FIFO文件的名称,从而启动了C。 IE:system(“ java-app名称'fifo文件名称'”)
C父级打开FIFO仅用于写操作


JAVA打开FIFO进行读取。


C通过write()向FIFO发送“握手”消息。
JAVA收到“握手”
然后,C尝试通过FIFO向JAVA发送后续消息。


这是奇怪的地方。除非C关闭(不删除)FIFO FD或父进程终止,否则JAVA不会从FIFO中读取。如果C发送“握手”然后关闭,则一切正常且符合预期。
如果C然后重新打开FIFO,向JAVA发送“消息”,则C关闭,JAVA将读取它。

从我研究过的C和JAVA之间的FIFO的所有示例来看,它们仅包含一次数据传输。 IE,按我的要求,打开,写入/读取,关闭,但不是从源到目标的连续流。

在每个端部实现“打开,读取/写入,关闭”是可行的,但是肯定地,必须有一种更好/更有效的方法-与管道的精神更加一致。如果是这样,我将不胜感激!

最佳答案

解决了

JAVA的readline期望'\ r'或'\ n'终止字符串。来自UNIX C环境(人们期望“ \ 0”作为“标准”终结符),并且对于JAVA来说还很陌生,这是一个有趣的课程!

Tnx chrylis和fge供您输入!

关于java - C进程和JAVA应用程序之间的FIFO问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28658353/

10-11 09:19
查看更多