2016-12-20 4 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と混在させたくないので、2つを完全に別々にしたい。私は、この2つの間にある種のファイルAPIを用意することで作業が楽になると思っていました。これを処理する良い方法は何でしょうか?

+0

あなたが探しているものの名​​前付きパイプですか? –

+0

@ Zekian名前付きパイプを試しましたが、受信側の接続が切断されるとループが存在します。私はパイプに接続したり、パイプから外すことができる必要があります。 –

答えて

0

名前付きパイプを使用してプログラムを記述します。注意しなければならないことの1つは、受信の終了が書き込みの途中で切断された場合、サーバーはSIGPIPE信号を受信し、この信号が処理またはブロックされない限り、サーバーは終了されません。

関連する問題