gpt4 book ai didi

java - C 进程和 JAVA 应用程序之间的 FIFO 问题

转载 作者:行者123 更新时间:2023-11-30 17:20:14 25 4
gpt4 key购买 nike

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

  1. C 通过 mkfifo 创建命名管道(也尝试过 mknod - 结果没有区别)
  2. C fork 子进程,调用 system() 调用来启动 JAVA 应用程序,并将 FIFO 文件的名称传递给它。 IE:系统(“java-app名称'fifo文件名称'”)
  3. C 父级打开 FIFO 仅供写入

JAVA 打开 FIFO 进行读取。

  1. C 通过 write() 向 FIFO 发送“握手”消息。
  2. JAVA 接收“握手”
  3. 然后,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 相当陌生,这是一个有趣的类(class)!

Tnx chrylis 和 fge 供您输入!

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com