IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

la structure FILE


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de elghadi_mohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Par défaut la structure FILE
    bonjour

    je voudrais quelques informations sur les champs de la structure FILE definie dans le fichier "libio.h" ou probablement "stdio.h":
    _IO_FILE {
    int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
    #define _IO_file_flags _flags

    /* The following pointers correspond to the C++ streambuf protocol. */
    /* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
    char* _IO_read_ptr; /* Current read pointer */
    char* _IO_read_end; /* End of get area. */
    char* _IO_read_base; /* Start of putback+get area. */
    char* _IO_write_base; /* Start of put area. */
    char* _IO_write_ptr; /* Current put pointer. */
    char* _IO_write_end; /* End of put area. */
    char* _IO_buf_base; /* Start of reserve area. */
    char* _IO_buf_end; /* End of reserve area. */
    /* The following fields are used to support backing up and undo. */
    char *_IO_save_base; /* Pointer to start of non-current get area. */
    char *_IO_backup_base; /* Pointer to first valid character of backup area */
    char *_IO_save_end; /* Pointer to end of non-current get area. */

    struct _IO_marker *_markers;

    struct _IO_FILE *_chain;

    int _fileno;
    int _blksize;
    _IO_off_t _old_offset; /* This used to be _offset but it's too small. */

    #define __HAVE_COLUMN /* temporary */
    /* 1+column number of pbase(); 0 is unknown. */
    unsigned short _cur_column;
    signed char _vtable_offset;
    char _shortbuf[1];

    /* char* _save_gptr; char* _save_egptr; */

    _IO_lock_t *_lock;
    #ifdef _IO_USE_OLD_IO_FILE
    };
    si quelqu'un pourrait m'expliquer d'avantage l'utilite des champs
    char* _IO_read_ptr; /* Current read pointer */
    char* _IO_read_end; /* End of get area. */
    char* _IO_read_base; /* Start of putback+get area. */
    et l'effet du mode d'ouverture d'un fichier (lecture,ecriture...) sur ces champs ???

    merci

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Bein, je crois qu'on ne devrait pas acceder à ces champs, en tout cas pas directement.

  3. #3
    Membre éclairé Avatar de elghadi_mohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Par défaut
    Citation Envoyé par Gruik
    Bein, je crois qu'on ne devrait pas acceder à ces champs, en tout cas pas directement.

    j'ai ecris un petit code sous unix qui me permet d'afficher les valeurs de ces champs et voici le resultat (il s'agit d'une lecture de contenu d'un fichier seulement "r"):
    -- apres ouverture du fichier
    _IO_read_ptr = 0
    _IO_read_end = 0
    _IO_read_base = 0
    _IO_buf_base = 0
    _IO_buf_end = 0
    _IO_read_ptr - _IO_read_base = 0
    _IO_read_end - _IO_read_base = 0
    _IO_buf_end - _IO_buf_base = 0
    _flags = 0x2488
    _fileno = 3
    100 premiers caracteres du buffer
    pointeur Null
    100 premiers caracteres a partir de _IO_read_ptr
    pointeur Null
    ----------------------------------

    -- apres lecture d'une ligne
    _IO_read_ptr = 3084832832
    _IO_read_end = 3084845568
    _IO_read_base = 3084832768
    _IO_buf_base = 3084832768
    _IO_buf_end = 3084865536
    _IO_read_ptr - _IO_read_base = 64
    _IO_read_end - _IO_read_base = 12800
    _IO_buf_end - _IO_buf_base = 32768
    _flags = 0x2488
    _fileno = 3
    100 premiers caracteres du buffer
    >>ligne 1 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN<<
    >>OPQRSTUVWXYZ .ligne 2 abcdefghijklmnopqrstuvwxyz<<
    100 premiers caracteres a partir de _IO_read_ptr
    >>ligne 2 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN<<
    >>OPQRSTUVWXYZ .ligne 3 abcdefghijklmnopqrstuvwxyz<<
    ----------------------------------

    -- apres lecture d'un caractere
    _IO_read_ptr = 3084832833
    _IO_read_end = 3084845568
    _IO_read_base = 3084832768
    _IO_buf_base = 3084832768
    _IO_buf_end = 3084865536
    _IO_read_ptr - _IO_read_base = 65
    _IO_read_end - _IO_read_base = 12800
    _IO_buf_end - _IO_buf_base = 32768
    _flags = 0x2488
    _fileno = 3
    100 premiers caracteres du buffer
    >>ligne 1 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN<<
    >>OPQRSTUVWXYZ .ligne 2 abcdefghijklmnopqrstuvwxyz<<
    100 premiers caracteres a partir de _IO_read_ptr
    >>igne 2 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO<<
    >>PQRSTUVWXYZ .ligne 3 abcdefghijklmnopqrstuvwxyzA<<
    ----------------------------------

    -- apres lecture de 150 lignes
    _IO_read_ptr = 3084842432
    _IO_read_end = 3084845568
    _IO_read_base = 3084832768
    _IO_buf_base = 3084832768
    _IO_buf_end = 3084865536
    _IO_read_ptr - _IO_read_base = 9664
    _IO_read_end - _IO_read_base = 12800
    _IO_buf_end - _IO_buf_base = 32768
    _flags = 0x2488
    _fileno = 3
    100 premiers caracteres du buffer
    >>ligne 1 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN<<
    >>OPQRSTUVWXYZ .ligne 2 abcdefghijklmnopqrstuvwxyz<<
    100 premiers caracteres a partir de _IO_read_ptr
    >>ligne 152 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN<<
    >>OPQRSTUVWXYZ .ligne 153 abcdefghijklmnopqrstuvwxyz<<
    ----------------------------------

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Ce sont sans doute les pointeurs vers le buffer interne...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé Avatar de elghadi_mohamed
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Par défaut
    Citation Envoyé par Médinoc
    Ce sont sans doute les pointeurs vers le buffer interne...
    oui biensure il definissent des zones memoires !!!

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par elghadi_mohamed
    je voudrais quelques informations sur les champs de la structure FILE
    Les champs dépendent de l'implémentation. La langage C ne définit pas ces champs. Il n'y a donc aucune information officielle.

    Vu du C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef struct _file FILE;
    suffit.

    D'autre part, tu n'as pas besoin de savoir ce qu'il y a dans cette structure pour écrire une application. Contente toi d'utiser les fonctions standards. Elles font tout ce qui est prévu par la définition du langage.

Discussions similaires

  1. Surcharge de la structure FILE
    Par ninfomane dans le forum C
    Réponses: 13
    Dernier message: 16/03/2010, 07h49
  2. structure FILE : nom du fichier
    Par garok01 dans le forum Bibliothèque standard
    Réponses: 3
    Dernier message: 07/08/2009, 07h43
  3. IPC - Files de messages - Structure des messages
    Par Mattius007 dans le forum C
    Réponses: 2
    Dernier message: 03/01/2007, 10h51
  4. Quelle structure Perl pour lire file texte formaté
    Par calima dans le forum Langage
    Réponses: 2
    Dernier message: 26/07/2006, 14h51
  5. champs de la structure FILE
    Par jexistetjs dans le forum C
    Réponses: 2
    Dernier message: 15/10/2003, 22h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo