std::fstream から FILE* を取得する 質問する

std::fstream から FILE* を取得する 質問する

C++ std::fstream から C FILE* ハンドルを取得する (クロスプラットフォームの) 方法はありますか?

私が質問する理由は、私の C++ ライブラリが fstreams を受け入れ、ある特定の関数では FILE* を受け入れる C ライブラリを使用したいからです。

ベストアンサー1

簡単に答えると、ノーです。

その理由は、 は実装の一部としてstd::fstreamを使用する必要がないためです。そのため、 オブジェクトからファイル記述子を抽出し、 FILE オブジェクトを手動で構築できたとしても、同じファイル記述子に書き込む 2 つのバッファリングされたオブジェクトが存在するため、別の問題が発生します。FILE*std::fstream

std::fstream本当の質問は、なぜオブジェクトを に変換するのかということですFILE*

お勧めはしませんが、調べてみるのもいいでしょうfunopen()
残念ながら、これはないPOSIX API (BSD 拡張) なので、移植性には疑問があります。おそらくこれがstd::stream、 をこのようなオブジェクトでラップした人が見つからない理由でもあります。

FILE *funopen(
              const void *cookie,
              int    (*readfn )(void *, char *, int),
              int    (*writefn)(void *, const char *, int),
              fpos_t (*seekfn) (void *, fpos_t, int),
              int    (*closefn)(void *)
             );

これにより、オブジェクトを構築し、実際の作業を行うために使用されるいくつかの関数を指定できます。適切な関数を記述すると、実際にファイルを開いているオブジェクトFILEから読み取ることができます。std::fstream

おすすめ記事