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 :

copier l'integralite d'une structure dans un fichier


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut copier l'integralite d'une structure dans un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdlib.h>
     
    typedef struct  header_posix{
      char  name[100];
      char  mode[8];
      char  uid[8];
      char  gid[8];
      char  size[12];
      char  mtime[12];
     
    } t_hearder;
     
     
    int     main(int argc, char **argv)
    {
      int fd;
      struct stat header;
      struct header_posix header_p;
     
      fd = open("archive", O_CREAT | O_WRONLY | O_TRUNC, S_IRWXO);
      stat("f1.c", &header);
      sprintf(header_p.name, "%s", "f1.c");
      sprintf(header_p.mode, "%d", header.st_mode);
      sprintf(header_p.uid, "%d", header.st_uid);
      sprintf(header_p.gid, "%d", header.st_gid);
      sprintf(header_p.size, "%d", header.st_size);
      sprintf(header_p.mtime, "%d", header.st_mtime); //jusqu'ici ca marche                                                  
       write(fd, &header_p, sizeof(header_p)); // le probleme se trouve ici 
      return (0);
    }
    En effet comment inclure l'integralite du contenu de la structure "header_p" dans un fichier.

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    bonjour

    on ne peut pas copier l'integraliter d'une structure d'un coup comme ca, comme d'ailleur il n'est pas possible de faire des test d'egalité, etc sur les struct il faut tous faire variable par variable , je te conseil dete fair une fonction qui le fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void writeStruct(FILE* output,taStruct* tastruct){
         fprintf(output,"%s ",tastruct->variable1);
         fprintf(output,"%s ",tastruct->variable2);
         fprintf(output,"%s \n",tastruct->variable3);
    }
    voila je crois que ca doit marcher comme ca

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par NexRezzo Voir le message
    on ne peut pas copier l'integraliter d'une structure d'un coup comme ca,
    si on peut.. bien sûr...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par NexRezzo Voir le message
    on ne peut pas copier l'integraliter d'une structure d'un coup comme ca...
    Mouais ...... un ptit coup de fwrite et hop le tour est joué ! Par contre pas en mode texte, là c'est du mode binaire qu'il faut !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    Mouais ...... un ptit coup de fwrite et hop le tour est joué ! Par contre pas en mode texte, là c'est du mode binaire qu'il faut !
    Et évidemment, il faut se rendre compte que le fichier créé peut ne pas être compatible avec d'autres plateformes et options de compilation où la taille des types, l'endianness, et les bytes de padding peuvent être différents.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 718
    Points : 31 035
    Points
    31 035
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    si on peut.. bien sûr...
    Je ne suis pas dans la tête de NexRezzo bien sûr, mais je pense qu'il voulait dire "c'est déconseillé de copier une structure d'un coup car on ne sait pas comment le compilo a organisé la structure en interne et donc on ne pourra pas forcément la relire partout (tous les compilos ne sont pas identiques) => il vaudrait mieux passer par un mode texte". En tout cas c'est ce que j'ai compris quand j'ai lu son post...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    En effet, après verification il est possible de copier les structures d'un bloc dans un fichier .Mais il faut connaitre son compilateur par coeur pour savoir comment il alignera en mémoire, les différants élements de la structure afin de les relire.Car il est impossible de prévoire l'adresse d'un champs dans une structure, bien que l'on puisse connaitre l'ordre des champs.
    En conclusion si tu copie ta structure d'un bloc il est fort possible que tu ne sache pas la relire.

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    Hio,
    Citation Envoyé par NexRezzo Voir le message
    En effet, après verification il est possible de copier les structures d'un bloc dans un fichier .Mais il faut connaitre son compilateur par coeur pour savoir comment il alignera en mémoire, les différants élements de la structure afin de les relire.Car il est impossible de prévoire l'adresse d'un champs dans une structure, bien que l'on puisse connaitre l'ordre des champs.
    En conclusion si tu copie ta structure d'un bloc il est fort possible que tu ne sache pas la relire.
    Pourquoi ne pourrait-on pas la relire ?

    Un p'tit coup de fread, et c'est dans la poche.

    Par contre, comme précisé par d'autres, ça peut des problèmes en utilisation avec un autre compilateur, voire même avec le même en changeant des options, sans parler bien entendu d'un changement d'OS et compilateur...
    Si les cons volaient, il ferait nuit à midi.

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Tout depend de ce que tu veux faire, si c'est pour ton utilisation sur une seul machine c'est possible, mais je pense que si tu ecrie le fichier avec une machine, une autre machine pourrait ne pas le relire correctement , voila c'est tout.
    Je ne cherche pas a te convaincre fait comme tu veux
    et sinon pour ta question de départ comme les autres l'ont dit : fwrite(..) et le tour est joué.

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/06/2007, 21h44
  2. Réponses: 17
    Dernier message: 09/03/2007, 18h13
  3. Copier le resultat d'une commande dans un fichier
    Par Cliff dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 01/02/2007, 16h28
  4. stocker une structure dans un fichier ini?
    Par Mickey.jet dans le forum C
    Réponses: 6
    Dernier message: 13/09/2006, 16h57
  5. copier une structure dans un fichier
    Par brute dans le forum MFC
    Réponses: 18
    Dernier message: 10/03/2006, 14h30

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