我有一个 C++ 程序,它运行这样的循环,使用我无权访问的专有驱动程序从视频设备抓取帧。
while(true) {
mybuf = getNextFrame(); // blocks
}
我想使用其他编程语言构建一些逻辑,所以我在考虑使用以下接口(interface)。 (我只需要 Linux 支持)
我正在考虑在某处放置一个文件,例如:
/我的/视频/设备
每次我对其调用 read()
时,它都会给我当前帧。另外,如果我再次调用 read() ,我希望它阻塞直到下一帧可用并为我返回它。此外,如果我有一段时间不调用 open(),我不希望中间的帧被缓冲。
什么是最好的方法?
我尝试使用 FUSE 来实现一个文件系统,但它试图在文件内部查找,如果它是一个常规文件,并且只会读取到我为文件指定的大小。然后我制作了一个字符设备,但它永远不会调用我的 read()
函数,而是说权限被拒绝...
我正在考虑尝试 CUSE,或者类似的东西。我是不是把事情复杂化了?我只需要能够处理不断来 self 的 C++ 循环的帧流,但我想用不同的语言解析它们,比如 Python 或 Go。我也不想将我的 C++ 代码与 Go 或 python 混合编译,我希望两者完全分开。我认为在两者之间有某种文件 API 会使事情变得更容易。处理此问题的好方法是什么?
最佳答案
我会使用命名管道编写程序。要记住的一件事是,如果接收端在写入过程中断开连接,服务器将收到 SIGPIPE 信号,除非该信号被处理或阻止,否则服务器将被终止。
关于Linux 中的 C++ Stream 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41241361/