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

Bibliothèque standard C Discussion :

probleme sur fonction fwrite


Sujet :

Bibliothèque standard C

  1. #1
    Membre régulier Avatar de gijy
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 83
    Points
    83
    Par défaut probleme sur fonction fwrite
    J'utilise la fonction fwrite pour faire quelques tests notament programmation sous linux.
    ci joint code
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    main()
    {
     char text[20];
     int i;
     FILE *file;
     
     
     file=fopen("enreg.txt","w+");
     i=20;
     sprintf(text,"enregistrement-%d",i);
     fwrite(text,sizeof(text),1,file);
     i=30;
     sprintf(text,"enregistrement-%d",i);
     fwrite(text,sizeof(text),1,file);
     fclose(file);
     return(0);
     }
    rien de bien mechant
    he bien sous win le fichier est lu correctement par l'editeur IDE de borland mais pas par le bloc note:
    BC: enregistrement-20 Í!enregistrement-30
    bloc note: 湥敲楧瑳敲敭瑮㈭0⇍湥敲楧瑳敲敭瑮㌭0⇍
    bizzard!!
    Par contre ci je fini ma chaine de text avec \n pour un retour chariot ca va.

    Maintenant le meme code compiler sous linux (distri DEBIAN) avec gcc
    me donne que enregistrement-20
    pourquoi un fonctionnement si erratique!!
    L'exemple provient d'un tuto de programmation LINUX

  2. #2
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    En plus de ne pas tester le retour des fonctions fopen et fwrite, il manque le caractère de fin de chaine '\0' dans ton tableau de char text.

    Tu peux déjà initialisé ton tableau lors de sa définition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char text[20] = {0};
    Maintenant le meme code compiler sous linux (distri DEBIAN) avec gcc
    me donne que enregistrement-20
    pourquoi un fonctionnement si erratique!!
    Je dirais que surement le compilateur initialise par défaut à 0 tes variables...

  3. #3
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Parce que tu écris tout le contenu de ton tableau dans le fichier donc Dieu seul sait à priori ce que ton programme a bien pu écrire (puisque le contenu d'une mémoire non initialisée est à priori inconnu, en d'autres termes elle peut contenir ... n'importe quoi!), il ne faut écrire que ce qu'il faut (tous les caractères avant le '\0'). Au moins tu aurais donc du écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(text, sizeof(char), strlen(text), file);
    Mais en réalité, tu aurais plutôt du utiliser tout simplement fprintf au lieu de sprintf suivi de fwrite.

    Citation Envoyé par homeostasie
    En plus de ne pas tester le retour des fonctions fopen et fwrite, il manque le caractère de fin de chaine '\0' dans ton tableau de char text.
    Hein?
    Citation Envoyé par gijy
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(text, "enregistrement-%d", i);

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Le problème ne vient pas de ton programme, mais de notepad:
    http://en.wikipedia.org/wiki/Bush_hid_the_facts
    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
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Médinoc
    Le problème ne vient pas de ton programme, mais de notepad:
    http://en.wikipedia.org/wiki/Bush_hid_the_facts
    Bien sûr que le programme y est pour quelque chose (et dans notre cas notepad aussi). Qui sait ce que contient la partie non initialisée du tableau, ca peut représenter des séquences spéciaux pour le logiciel (comme il a été le cas ici), notepad ou pas notepad ...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ah, en effet, je n'avais bien lu que la première erreur:
    Citation Envoyé par gijy
    he bien sous win le fichier est lu correctement par l'editeur IDE de borland mais pas par le bloc note:
    BC: enregistrement-20 Í!enregistrement-30
    bloc note: 湥敲楧瑳敲敭瑮㈭0⇍湥敲楧瑳敲敭瑮㌭0⇍
    Cette erreur là est bien due aux "cachotteries de Bush".

    La suivante par contre, indique bien un bug du programme:
    Maintenant le meme code compiler sous linux (distri DEBIAN) avec gcc
    me donne que enregistrement-20
    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.

  7. #7
    Membre régulier Avatar de gijy
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 83
    Points
    83
    Par défaut
    Merci pour toutes vos reponse.
    - il n'y a pas de test sur les retours des fonctions car le but est de jouez avec la fonction fwrite. Personnellement j'utilise plus souvent fprintf ou _write en bas niveau.
    - Sous win apres un memset de text à 0 la lecture sous notepad est correcte sauf evidement les carateres non utilisé du tampon.
    - Sous DEBIAN memset qui est une fonction ANSI n'est pas reconnue meme avec l'include mem.h

    Je ne suis pas pret pour la portabilité !!!

  8. #8
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par gijy
    il n'y a pas de test sur les retours des fonctions car le but est de jouez avec la fonction fwrite. Personnellement j'utilise plus souvent fprintf ou write en bas niveau.
    C'est quoi au fait l'avantage des fonctions de bas niveau par rapport aux fonctions de haut niveau?
    Citation Envoyé par gijy
    Sous win apres un memset de text à 0 la lecture sous notepad est correcte sauf evidement les carateres non utilisé du tampon.
    memset ne change rien, si tu utilises fwrite tu n'as même pas besoin de '\0' puisqu'on spécifie le nombre de caractères à écrire, mais terminer une chaîne par '\0' permet d'utiliser strlen pour obtenir la longueur du chaîne. Et je répète qu'on n'écrit pas le '\0' dans un fichier texte.
    Citation Envoyé par gijy
    Sous DEBIAN memset qui est une fonction ANSI n'est pas reconnue meme avec l'include mem.h
    parce que mem.h n'est pas un en-tête standard, memset est déclarée dans string.h.
    Citation Envoyé par gijy
    Je ne suis pas pret pour la portabilité !!!
    Normal, tu ne sais même pas ce que c'est.

  9. #9
    Membre régulier Avatar de gijy
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 83
    Points
    83
    Par défaut
    Et toi quelle est ta definition de la portatilité?

  10. #10
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Je n'ai pas ma définition de la portabilité, mais je connais la définition de la portabilité. Si tu veux, un programme portable est un un programme qui peut être porté vers d'autres plateformes sans aucune modification du code source. Pour arriver à écrire du code correct et portable en langage C il faut un bon cours, beaucoup d'entraînement et beaucoup de lecture. Voici de bons liens :

    http://c.developpez.com/cours/poly-c
    http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gijy Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     char text[20];
     fwrite(text,sizeof(text),1,file);
     fwrite(text,sizeof(text),1,file);
    Problème classique. C'est pas sizeof, mais strlen(). ici, sizeof prend le 0 final (et des caractères non initialisés après). On enregistre pas de 0 dans un fichier texte.
    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
     
    #include <stdio.h>
    #include <string.h>
     
    int main (void)
    {
       FILE *file = fopen ("enreg.txt", "w");
       if (file != NULL)
       {
          char text[20];
          int i = 20;
          sprintf (text, "enregistrement-%d", i);
          fwrite (text, strlen (text), 1, file);
          i = 30;
          sprintf (text, "enregistrement-%d", i);
          fwrite (text, strlen (text), 1, file);
          fclose (file);
       }
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enregistrement-20enregistrement-30
    D'autre part, il est recommandé de respecter la structure 'texte' dans un fichier ouvert en mode texte. La ligne devrait être terminée par un \n.

    Tu veux probablement ceci :
    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
     
    #include <stdio.h>
    #include <string.h>
     
    int main (void)
    {
       FILE *file = fopen ("enreg.txt", "w");
       if (file != NULL)
       {
          char text[20];
          int i = 20;
          sprintf (text, "enregistrement-%d\n", i);
          fwrite (text, strlen (text), 1, file);
          i = 30;
          sprintf (text, "enregistrement-%d\n", i);
          fwrite (text, strlen (text), 1, file);
          fclose (file);
       }
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    enregistrement-20
    enregistrement-30
    Nota la taille de 'text' est correcte, mais limite...
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Melem Voir le message
    Mais en réalité, tu aurais plutôt du utiliser tout simplement fprintf au lieu de sprintf suivi de fwrite.
    +1, mais c'est peut être une simulation de chaussettes...
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Le problème ne vient pas de ton programme, mais de notepad:
    http://en.wikipedia.org/wiki/Bush_hid_the_facts
    Rien à voir ici. La chaine enregistrée n'est pas claire, tout peut arriver. C'est bien le programme qui est buggé.
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gijy Voir le message
    - Sous DEBIAN memset qui est une fonction ANSI n'est pas reconnue meme avec l'include mem.h

    Je ne suis pas pret pour la portabilité !!!
    Tu devrais surtout commencer par relire ton livre de C.

    Pour memset(), il faut <string.h> et c'est parfaitement portable. mem.h, vu du langage C, ça n'existe pas...
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Membre régulier Avatar de gijy
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 83
    Points
    83
    Par défaut
    Effectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fwrite(text,sizeof(char),strlen(text),fp);
    resoud tres bien le probleme sous linux, win et avec n'importe quel editeur de texte.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gijy Voir le message
    Effectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fwrite(text,sizeof(char),strlen(text),fp);
    resoud tres bien le probleme sous linux, win et avec n'importe quel editeur de texte.
    Ou tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fwrite(text, 1, strlen(text), fp);
    car sizeof(char) vaut 1 par définition (char est l'unité de compte pour la taille des objets. Comme toutes les unités, elle vaut 1... Simple bon sens)
    Pas de Wi-Fi à la maison : CPL

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Alors sizeof text[0], non ?
    Au moins, ce sera ça de moins à modifier dans le code en cas de passage en wchar_t...
    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.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Alors sizeof text[0], non ?
    Au moins, ce sera ça de moins à modifier dans le code en cas de passage en wchar_t...
    Certes, mais beaucoup de choses changent dans ce cas, à commencer par strlen().
    Pas de Wi-Fi à la maison : CPL

  19. #19
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ou tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fwrite(text, 1, strlen(text), fp);
    car sizeof(char) vaut 1 par définition (char est l'unité de compte pour la taille des objets. Comme toutes les unités, elle vaut 1... Simple bon sens)
    Ouais mais c'était surtout pour mettre en évidence d'où vient le 1.

    Citation Envoyé par Médinoc
    Alors sizeof text[0], non ?
    Au moins, ce sera ça de moins à modifier dans le code en cas de passage en wchar_t...
    D'habitude c'est bien. Mais ici si on passe en wchar_t il y a donc aussi strlen à modifier (strlen => wcslen) ...

  20. #20
    Membre régulier Avatar de gijy
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 83
    Points
    83
    Par défaut
    Pour la petite histoire voici le code issu du livre programmation LINUX de Neil MAtthew, sur lequel je me suis basé pour l'utilisation à l'origine de la fonction mmap .
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    /*  We start by defining a RECORD structure
        and then create NRECORDS versions each recording their number.
        These are appended to the file records.dat.  */
     
    #include <unistd.h>
    #include <stdio.h>
    #include <sys/mman.h>
    #include <fcntl.h>
     
    typedef struct {
        int integer;
        char string[24];
    } RECORD;
     
    #define NRECORDS (100)
     
    int main()
    {
        RECORD record, *mapped;
        int i, f;
        FILE *fp;
     
        fp = fopen("records.dat","w+");
        for(i=0; i<NRECORDS; i++) {
            record.integer = i;
            sprintf(record.string,"RECORD-%d",i);
            fwrite(&record,sizeof(record),1,fp);
        }
        fclose(fp);
     
    /*  We now change the integer value of record 43 to 143
        and write this to the 43rd record's string.  */
     
        fp = fopen("records.dat","r+");
        fseek(fp,43*sizeof(record),SEEK_SET);
        fread(&record,sizeof(record),1,fp);
     
        record.integer = 143;
        sprintf(record.string,"RECORD-%d",record.integer);
     
        fseek(fp,43*sizeof(record),SEEK_SET);
        fwrite(&record,sizeof(record),1,fp);
        fclose(fp);
     
    /*  We now map the records into memory
        and access the 43rd record in order to change the integer to 243
        (and update the record string), again using memory mapping.  */
     
        f = open("records.dat",O_RDWR);
        mapped = (RECORD *)mmap(0, NRECORDS*sizeof(record), 
                              PROT_READ|PROT_WRITE, MAP_SHARED, f, 0);
     
        mapped[43].integer = 243;
        sprintf(mapped[43].string,"RECORD-%d",mapped[43].integer);
     
        msync((void *)mapped, NRECORDS*sizeof(record), MS_ASYNC);
        munmap((void *)mapped, NRECORDS*sizeof(record));
        close(f);
     
        exit(0);
    }
    Salut.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Probleme sur Fonction Split
    Par Jeyjey1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/07/2011, 14h48
  2. Probleme sur fonction TRANSLATE
    Par chonch dans le forum PL/SQL
    Réponses: 3
    Dernier message: 21/05/2010, 15h04
  3. Probleme sur une fonction
    Par dederfred dans le forum Delphi
    Réponses: 1
    Dernier message: 06/10/2006, 16h58
  4. Probleme sur fonction strcmp
    Par Invité dans le forum C
    Réponses: 8
    Dernier message: 10/01/2006, 00h02
  5. Probleme sur une fonction vérif
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/10/2004, 13h25

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