关于C ++和C ++的基本问题命名管道

时间:2014-04-16 19:01:25

标签: c++ unix named-pipes fifo

我试图进行一些程序间数据交换,我决定使用命名管道。 我有一个非常基本的读者和一个非常基本的作家,取自示例答案here

  • 我的第一个问题是我不能使用两次write(...),除非我让程序睡觉。有办法吗? 让它在每次输入后调用sleep(1)会使进程时间爆炸。

  • 我还希望在同一个fifo中写入多个进程。那可能吗?我的尝试返回了很多问题......

  • 最后有没有办法让fifo携带一个对象而不是一个字符串?

1 个答案:

答案 0 :(得分:2)

1)写入 - 检查写入的结果。如果管道的另一端未打开,则写入的字节数将为0.

2)不可能但你可以有一个服务器fifo来接收请求。然后,它为每个客户端进程生成一个管道名称,以便连接并将其发送到客户端。客户端读取服务器管道,关闭服务器管道并打开具有服务器指定的新名称的管道。服务器必须在单独的线程中轮询所有管道。

3)这只是一个写 - 它可以采取任何东西。只需将整个对象转储为二进制文件。请注意,对象中不应该有任何指针,因为指针不会指向同一个地址空间。