ホームページ >バックエンド開発 >C++ >POSIX ファイル記述子から C fstream を作成するにはどうすればよいですか?

POSIX ファイル記述子から C fstream を作成するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-20 17:45:14426ブラウズ

How to Create a C   fstream from a POSIX File Descriptor?

POSIX ファイル記述子から C fstream を構築する方法?

POSIX ファイル記述子から C fstream を作成するには考慮が必要です。単純そうに見えますが、実装は複雑になる可能性があります。

標準 C アプローチ

標準 C ライブラリには、ファイル記述子から fstream を作成する直接メソッドは提供されていません。ただし、 libstdc などの一部の実装は、ファイル記述子または FILE* ポインターを入力として受け入れる非標準の拡張コンストラクターを提供する場合があります。

Libstdc ソリューション

Libstdc は、 __gnu_cxx:: stdio_filebuf クラス テンプレート。std::basic_streambuf から継承し、関連付けるコンストラクターを持ちます。 POSIX ファイル記述子を使用したスト​​リーム バッファー:

stdio_filebuf (int __fd, std::ios_base::openmode __mode, size_t __size=static_cast< size_t >(BUFSIZ))

このコンストラクターを使用した例:

#include <ext/stdio_filebuf.h> // Libstdc++ extension
#include <iostream>

int main() {
    ...

    int posix_handle = ...;

    __gnu_cxx::stdio_filebuf<char> filebuf(posix_handle, std::ios::in);
    istream is(&filebuf);

    ...

Microsoft Visual C ソリューション

Microsoft Visual C では、非-FILE* ポインターを受け入れる標準の ifstream コンストラクター:

explicit basic_ifstream(_Filet *_File);

これを使用できますコンストラクターを _fdopen とともに使用して、ファイル記述子から ifstream を作成します:

#include <cstdio>
#include <iostream>

int main() {
    ...

    int posix_handle = ...;

    FILE* c_stream = _fdopen(posix_handle, "r");
    ifstream ifs(c_stream);

    ...

以上がPOSIX ファイル記述子から C fstream を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。