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

Bagaimana untuk Membuat C fstream daripada Deskriptor Fail POSIX?

DDD
Lepaskan: 2024-12-20 17:45:14
asal
501 orang telah melayarinya

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))
Salin selepas log masuk

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);

    ...
Salin selepas log masuk

Microsoft Visual C Solution

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

explicit basic_ifstream(_Filet *_File);
Salin selepas log masuk

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);

    ...
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan