fopen を呼び出すときに C 関数を呼び出したい C の状況があります。これは、ある種の「仮想ファイル」が必要であることを意味します。この「仮想ファイル」で fopen を使用する場合、関数を呼び出してファイル内のデータを生成したいと考えています。
これは可能ですか?
ありがとう!
関数を呼び出して出力を生成する直接的な方法はありません。ただし、を使用して別のプロセスを呼び出すことができpopen()
ます。これで十分な場合があります。
不可能な標準Cでは、AFAIK、
GNU Glibcを備えたシステム(GNU / Linuxなど)を使用する場合は、特にスルーを介してカスタムストリームfopencookie
を使用できます。
標準C++ライブラリも(独自のバリアントの)ストリームを提供し、独自のストリームを持つことができることに注意してください。
GNU / Linuxでは、カーネルを使用して、ユーザースペースにFUSEを使用してファイルシステムを提供することもできます。
これは、ある種の「仮想ファイル」が必要であることを意味します。この「仮想ファイル」で fopen を使用する場合、関数を呼び出してファイル内のデータを生成したいと考えています。
そのためには、独自のファイル システムを作成する必要があります。幸運なことに、他の人が難しい部分をやってくれました: FUSEを見てください。たとえば、「ファイル」が実際には RSS フィードであるファイル システムを作成できます。次に、標準のファイル呼び出しを使用して、これらのフィードからデータを読み取ることができます。
さて、このアプローチを取るべきかどうかは別の問題です。ファイルを読み取るコードを制御できる場合は、カスタム ファイル システムのインストールを要求するよりも、適切なデータ提供関数を呼び出す方がおそらく簡単です。