【问题标题】:C++ Stream interface in LinuxLinux 中的 C++ Stream 接口
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    相关资源
    最近更新 更多