Comment puis-je obtenir le descripteur de fichier à partir de l'ouverture du FICHIER de structure?
La fopen
fonction renvoie un pointeur vers une FILE
structure, qui doit être considéré comme une quasi-opaque, sans avoir à se préoccuper de son contenu ou la signification.
Sur Windows, le runtime C est un wrapper de l'API Windows, et le fopen
fonction s'appuie sur le CreateFile
fonction. Le CreateFile
fonction renvoie un HANDLE
, qui est utilisé par d'autres API de Windows.
Maintenant, j'ai besoin d'utiliser l'API Windows profondément à l'intérieur d'une bibliothèque qui utilise fopen
et FILE*
. Donc: est-il un moyen pour obtenir la HANDLE
de la FILE
structure? Comme c'est le compilateur spécifique, je veux dire sur la MSVC la bibliothèque d'exécution.
Je comprends que ce serait moche, non portable hack, et qui pourrait cassé si Microsoft change le format interne de FILE
... mais je suis sur un système fermé (c'est à dire sur un Windows CE embedded system) et le refactoring, la bibliothèque devrait être difficile et prend du temps.
- La grande question, j'ai traité de cette un moi-même il y a 2 ans.
Vous devez vous connecter pour publier un commentaire.
Utilisation
_fileno
suivie par_get_osfhandle
. N'oubliez pas de_close
lorsque vous avez terminé.EDIT: il n'est pas clair pour moi que
_get_osfhandle
est pris en charge sur WinCE. Cependant, les docs pour WinCE_fileno
dire qu'il renvoie un descripteur de fichier" plutôt que "descripteur". YMMV, mais cela donne à penser que vous pouvez peut-être juste utiliser_fileno
valeur de retour directement comme une poignée de WinCE.EDIT: #2 Cette théorie est soutenue par cette expérience.
"Si vous regardez les fichiers d'en-tête que j'ai posté à la liste le 29 Jan
vous pouvez voir comment j'ai géré la création de fichier/poignée de problème. Je n'avais pas
pour remplacer tous les FICHIERS* les articles avec des Poignées. Voir l'extrait de code suivant à partir de
fileio.cpp:
Il s'avère que _fileno retourne un handle. Vous avez juste à lancer."
Sur Linux, il y a le
int fileno(FILE *);
fonction qui renvoie le descripteur de fichier (celui qui a été renvoyé par le faible niveau deopen
fonction) de laFILE*
.Je ne sais pas si elle s'applique à Windows et retourne le HANDLE si?
Pour C, essayez cette