c++ - "handshake"通常是如何实现命名管道的

标签 c++ linux signals named-pipes

我需要在使用命名管道与其他进程通信的小型 Linux 程序中实现握手类型协议(protocol)。我已经在使用命名管道时搜索了握手类型协议(protocol)的一般实现模式,但我无法打开任何东西......

我简直不敢相信没有模式可以做到这一点。有人可以指出我可能的资源吗?

完全公开这是为了家庭作业,但实现此模式不是家庭作业。我们需要解决家庭作业代码中的问题,我相信这是一个可能的解决方案。家庭作业是用 C++ 实现的——但语言对我来说并不重要。我只是不想重新发明轮子....

更新:我觉得这可以通过信号来实现。

我所说的握手是指子进程向其父进程报告它已准备好工作但没有继续(即使pipe) 直到 parent 给出开始信号。在我的工作理论中,我将有许多子进程需要报告就绪等待来自父进程的 go 信号。

最佳答案

典型 用法中,进程依赖阻塞来握手。写入进程打开管道进行写入,读取进程打开管道进行读取,以先发生者为准,直到另一个进程打开它的一侧。这可以扩展为在读取器端使用非阻塞 IO。

命名管道对于一对一的 IPC 最有用。在一对多的情况下,您可能应该改用 UNIX 域套接字。

关于c++ - "handshake"通常是如何实现命名管道的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1220499/

相关文章:

c - 是否有一种标准的传播方式来解析配置文件

linux - 编写通用/本地外观的 GUI Linux 应用程序

c - 接受信号处理程序干扰的调用

c - SIGINT 的信号处理程序

c++ - 如何检查 C++ 类构造函数中的参数大小

c++ - 如何将垫子中包含的图像复制到更大的垫子上?

linux - 无法在 redhat linux 中执行 bash 脚本

c - 为什么这个程序在 init/reboot/shutdown 时没有收到 SIGTERM?

c++ - 使用 std::complex<double> 为 `*` 操作将 int 转换为 double

c++ - 将每个对象独立渲染到空间中,并在 3D 场景上渲染 2D 场景