【问题标题】:Bidirectional message passing between 2 processes within an OS操作系统内两个进程之间的双向消息传递
【发布时间】:2015-03-27 08:13:47
【问题描述】:

PIPES 是单向的,可以同步或异步通信。

但是如何创建一个双向命名管道,一个端点在一个进程上,另一个端点在另一个进程上,这两个进程共享相同的内存并且存在于相同的操作系统中并且异步通信。

有办法吗?

【问题讨论】:

  • struct { int read_pipe_fd, write_pipe_fd; } bidirectional;
  • 谢谢。但是消息传递应该在一个双向通道上,一个端点连接到一个进程,另一个端点连接到第二个进程。在上面的结构中,它将被视为两个不同的双向通道。我很困惑,请纠正我。
  • 你会有两个单向管道。在不同的 fd 上调用 read()write() 有什么区别?
  • 它们在同一个频道上不是双向的。我们创建了两个不同的频道,一个用于阅读,另一个用于写作。
  • @Angus “它们在同一个通道上不是双向的。” -- 你应该研究硬件类比。两个单向(又名半双工)通道通常用于双向通信。当单个通道用于两个方向时,要么 (a) 一次只能通过某种协议传输,以禁止从两端同时传输,或者 (b) 在每一端添加复杂的电子设备(例如回声取消),以便每一端可以同时发送和接收。

标签: linux linux-kernel operating-system kernel multiprocessing


【解决方案1】:

在 Linux 上,如果您想要全双工通信,则必须使用 two pipes。然而,Solaris 有全双工管道。

听起来 Unix 域套接字可以满足您的要求。这样的套接字被命名为全双工和异步的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 2016-08-27
    • 1970-01-01
    • 2023-03-27
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    相关资源
    最近更新 更多