std::fstreamからFILE*を取得する
2023-11-04 20:56:12
質問
C++のstd::fstreamからCのFILE*ハンドルを取得する(クロスプラットフォーム)方法はあるのでしょうか?
私が尋ねる理由は、私の C++ ライブラリは fstream を受け入れ、ある特定の関数で FILE* を受け入れる C ライブラリを使用したいからです。
どのように解決するのですか?
簡単に言うと、「いいえ」です。
その理由は
std::fstream
を使用する必要がないためです。
FILE*
をその実装の一部として使用する必要はありません。そのため、ファイルディスクリプタをなんとか取り出したとしても
std::fstream
オブジェクトからファイル記述子を抽出し、手動で FILE オブジェクトを構築したとしても、同じファイル記述子に対して書き込む 2 つのバッファード オブジェクトを持つことになるため、別の問題が発生します。
本当の疑問は、なぜ
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
オブジェクトから読み込むようにすることができます。
関連
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] ファイルの作成日時、変更日時を取得する方法
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] ファイルディスクリプタとファイルポインタの違いは何ですか?