2016-12-20 42 views
1

我有一个C++程序,它运行一个像这样的循环,使用我无法访问的专有驱动程序从视频设备中获取帧。Linux中的C++流接口

while(true) { 
    mybuf = getNextFrame(); // blocks 
} 

我想建立一些使用其他编程语言的逻辑,所以我想使用下面的接口。 (我只需要Linux支持) 我在想某个地方有一个文件,例如: /my/video/device 而且每次我打电话给read(),它都会给我当前帧。另外,如果我再次调用read(),我希望它阻塞,直到下一帧可用并返回给我。另外,如果我不打开open()一段时间,我不希望中间的帧被缓冲。

什么是最好的方法? 我试图使用FUSE来实现一个文件系统,但它试图在文件内寻找,如果它是一个常规文件,并且只能读取到我指定的文件大小。然后我做了一个字符设备,但它永远不会调用我的read()函数,相反它会说权限被拒绝...

我在考虑尝试使用CUSE或其他方法。我在复杂的事情?我只需要能够处理来自我的C++循环的一系列帧,但我想用不同的语言解析它们,如Python或Go。我也不想将我的C++代码的编译与Go或Python混合,我希望两者完全分离。我认为两者之间有一些文件API会让事情变得更容易。什么是处理这个问题的好方法?

+0

是一个命名管道,你正在寻找的东西? –

+0

@ Zekian我尝试了命名管道,但是如果接收端断开我的循环存在。我需要能够连接和断开管道。 –

回答

0

我会使用命名管道编写程序。需要注意的一点是,如果接收端在写入过程中断开连接,服务器将收到一个SIGPIPE信号,除非该信号被处理或阻止,否则服务器将被终止。