Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Membuat C fstream daripada Deskriptor Fail POSIX?

Bagaimana untuk Membuat C fstream daripada Deskriptor Fail POSIX?

DDD
DDDasal
2024-12-20 17:45:14422semak imbas

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

Bagaimana untuk Membina aliran C daripada Deskriptor Fail POSIX?

Mencipta aliran C daripada deskriptor fail POSIX memerlukan pertimbangan. Walaupun ia kelihatan mudah, pelaksanaannya boleh menjadi rumit.

Pendekatan Standard C

Pustaka C standard tidak menyediakan kaedah langsung untuk mencipta fstream daripada deskriptor fail. Walau bagaimanapun, sesetengah pelaksanaan, seperti libstdc , mungkin menawarkan pembina sambungan bukan standard yang menerima deskriptor fail atau penuding FILE* sebagai input.

Libstdc Solution

Libstdc menyediakan __gnu_cxx:: templat kelas stdio_filebuf, yang mewarisi daripada std::basic_streambuf dan mempunyai pembina yang mengaitkan penimbal strim dengan deskriptor fail POSIX:

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

Contoh menggunakan pembina ini:

#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 Solution

Microsoft Visual C juga menawarkan pembina ifstream bukan standard yang menerima FILE* penunjuk:

explicit basic_ifstream(_Filet *_File);

Anda boleh menggunakan pembina ini bersama-sama dengan _fdopen untuk mencipta ifstream daripada deskriptor fail:

#include <cstdio>
#include <iostream>

int main() {
    ...

    int posix_handle = ...;

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

    ...

Atas ialah kandungan terperinci Bagaimana untuk Membuat C fstream daripada Deskriptor Fail POSIX?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn