我有一個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會讓事情變得更容易。什麼是處理這個問題的好方法?
是一個命名管道,你正在尋找的東西? –
@ Zekian我嘗試了命名管道,但是如果接收端斷開我的循環存在。我需要能夠連接和斷開管道。 –