【发布时间】:2017-05-05 14:42:29
【问题描述】:
我有一个 C++ 程序,它运行这样的循环,使用我无法访问的专有驱动程序从视频设备中抓取帧。
while(true) {
mybuf = getNextFrame(); // blocks
}
我想使用其他编程语言构建一些逻辑,所以我正在考虑使用以下接口。 (我只需要 Linux 支持)
我正在考虑在某处有一个文件,例如:
/my/video/device
每次我打电话给read() 时,它都会给我当前帧。另外,如果我再次调用 read(),我希望它阻塞直到下一帧可用并为我返回。另外,如果我暂时不调用 open(),我不希望中间的帧被缓冲。
最好的方法是什么?
我试图使用 FUSE 来实现一个文件系统,但它试图在文件内部寻找,如果它是一个常规文件,并且只会读取到我为文件指定的大小。然后我制作了一个字符设备,但它永远不会调用我的read() 函数,而是会说权限被拒绝...
我正在考虑尝试 CUSE 或类似的东西。我是不是把事情复杂化了?我只需要能够处理不断来自我的 C++ 循环的帧流,但我想用不同的语言解析它们,比如 Python 或 Go。我也不想将我的 C++ 代码的编译与 Go 或 python 混合,我希望两者完全分开。我认为在两者之间有某种文件 API 会使事情变得更容易。有什么好的处理方法?
【问题讨论】:
-
命名管道是您要找的那种东西吗?
-
@Zekian 我试过命名管道,但如果接收端断开我的循环存在。我需要能够连接和断开管道。
标签: c++ linux filesystems driver fuse