從 POSIX 檔案描述符建立 C fstream 需要考慮。雖然看起來簡單,但實作可能很複雜。
標準 C 函式庫不提供從檔案描述符建立 fstream 的直接方法。但是,某些實作(例如 libstdc )可能提供非標準擴充建構函數,該建構函數接受檔案描述符或 FILE* 指標作為輸入。
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 也提供了一個非標準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中文網其他相關文章!