首頁 >後端開發 >C++ >如何從 POSIX 檔案描述符建立 C fstream?

如何從 POSIX 檔案描述符建立 C fstream?

DDD
DDD原創
2024-12-20 17:45:14427瀏覽

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 也提供了一個非標準ifstream 建構函數,它接受FILE*指標:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn