Maison >développement back-end >C++ >Comment puis-je construire un fstream C à partir d'un descripteur de fichier POSIX ?

Comment puis-je construire un fstream C à partir d'un descripteur de fichier POSIX ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-14 11:58:13459parcourir

How Can I Construct a C   fstream from a POSIX File Descriptor?

Construire un fstream C à partir d'un descripteur de fichier POSIX

Problème :
Construire un objet fstream directement à partir d'un descripteur de fichier POSIX peut être difficile en C .

Solution :

Libstd

Pour libstdc , il n'existe pas de moyen standard de procéder. Cependant, libstdc propose un constructeur non standard pour fstream qui prend une entrée de descripteur de fichier.

Exemple :

#include <ext/stdio_filebuf.h>
using namespace std;

int main() {
  int posix_handle = open("file.txt", O_RDONLY);  // Open a file with POSIX handle
  __gnu_cxx::stdio_filebuf<char> filebuf(posix_handle, ios::in);  // Create stdio_filebuf from POSIX handle
  ifstream ifs(&filebuf);  // Create ifstream from stdio_filebuf

  // Read from the file
}

Microsoft Visual C

Microsoft Visual C fournit également un constructeur non standard pour ifstream qui accepte un pointeur FILE. Vous pouvez appeler _fdopen pour obtenir le FILE à partir du descripteur de fichier POSIX.

Exemple :

#include <cstdio>
#include <fstream>
using namespace std;

FILE *_file = fopen("file.txt", "r");  // Open a file with C file handle
ifstream ifs(_fdopen(_fileno(_file), "r"));  // Create ifstream from FILE*

// Read from the file

Remarque :

Ces non -les constructeurs standard peuvent ne pas être disponibles dans toutes les implémentations C. Il est recommandé de consulter la documentation de votre implémentation spécifique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn