我需要在/ tmp中使用名为FIFO的进程(Kamailio SIP服务器)进行通信。它的工作方式是我需要设置一个自己的响应FIFO,然后将请求写入Kamailio,它将把响应写回我的FIFO。
所以,我的理解应该是......
尝试打开(fifo,“r”)FIFO并读取()它..但是这将在open()中阻塞,因为没有人打开FIFO进行写入
将请求写入众所周知的静态FIFO(例如/ tmp / request_fifo)。该请求包括我的响应FIFO的名称
Kamailio将处理请求,打开我的响应FIFO进行写入并写入()响应。
此时我的open()应该解除阻塞,read()接收数据。但似乎并没有这样做。它有时有效但有时却没有。
写完回复后,Kamailio将关闭我的响应FIFO,这将导致下一次读取的EOF()
现在我可以使用临时响应FIFO
我试图以几种不同的方式完成此操作后关闭我的大脑,包括线程,popen:“cat< response_fifo”,甚至尝试使用非阻塞打开和轮询..
如果我看看用于运行命令的Kamailio shell脚本是如何做到的,那就太简单了,它会让我哭泣:)
cat < $response_fifo &
printf "$CMD" > $request_fifo
wait
rm $response_fifo
任何人都有一个优雅的Python解决方案吗?