Linux 中的 C++ Stream 接口(interface)

标签 c++ linux filesystems driver fuse

我有一个 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/

相关文章:

c - 如何将 malloc 与 madvise 一起使用并启用 MADV_DONTDUMP 选项

linux - float 分配算作使用 fpu 吗?

c++ - 使变量在程序终止后仍然存在

从无符号到有符号的 C++ 隐式数据类型转换

c - 文件描述符有效,但调用 read() 返回 -1

Linux文件系统SUPER_MAGIC、FS_MAGIC和TEST_MAGIC区别

linux - 如何在Linux中格式化特定大小的文件系统

linux - 如何使用 XFS 设置保证 io?

c++ - 如何将二维矩阵传递给函数

c++ - 当使用 malloc 而不是 new 时,类成员会发生什么情况?