我试图进行一些程序间数据交换,我决定使用命名管道。 我有一个非常基本的读者和一个非常基本的作家,取自示例答案here。
我的第一个问题是我不能使用两次write(...)
,除非我让程序睡觉。有办法吗?
让它在每次输入后调用sleep(1)
会使进程时间爆炸。
我还希望在同一个fifo中写入多个进程。那可能吗?我的尝试返回了很多问题......
最后有没有办法让fifo携带一个对象而不是一个字符串?
答案 0 :(得分:2)
1)写入 - 检查写入的结果。如果管道的另一端未打开,则写入的字节数将为0.
2)不可能但你可以有一个服务器fifo来接收请求。然后,它为每个客户端进程生成一个管道名称,以便连接并将其发送到客户端。客户端读取服务器管道,关闭服务器管道并打开具有服务器指定的新名称的管道。服务器必须在单独的线程中轮询所有管道。
3)这只是一个写 - 它可以采取任何东西。只需将整个对象转储为二进制文件。请注意,对象中不应该有任何指针,因为指针不会指向同一个地址空间。