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 :

ce que je pense ecrire n'est pas ce que je relis


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut ce que je pense ecrire n'est pas ce que je relis
    Salut,

    Lorsque j'ecris dans un fichier binaire avec fwrite et que je relis par la suite ce fichier avec fread, je me rend compte que les valeurs lus dans le fichier ne sont pas que j'ai donnée en parametre defwrite le coup d'avant!!
    Voici mon 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    do
    {
    length = fread(mem,1,1,f_in);
    if(length != 0)
        a = * mem;
        else a = * zero;
     
    length = fread(mem,1,1,f_in);
    if(length != 0)
        b = * mem;
        else b = * zero;
     
    length = fread(mem,1,1,f_in);
    if(length != 0)
        c = * mem;
        else c =  * zero;
     
    length = fread(mem,1,1,f_in);
    if(length != 0)
        d = * mem;
        else d = * zero;
     
    //cipherblock(&a,&b,&c,&d,k);
    decipherblock(&a,&b,&c,&d,k);
     
    *mem = a;
    fwrite(mem,1,1,f_out);
    *mem = b;
    fwrite(mem,1,1,f_out);
    *mem = c;
    fwrite(mem,1,1,f_out);
    *mem = d;
    fwrite(mem,1,1,f_out);
    loop++;
    }while(length != 0);
    Ce que je recois en entrée de decipher n'est pas ce qui etait à la sortie de cipher!!!Pourtant j'ai uniquement une operation de ecriture lecture entre les 2.
    en effet cipherbloc renvoit :
    68E818D8 8D51B3A8 EFB3A42 60E426D6
    et decipherblock recoit apres lecture du fichier :
    D8 A8 42 D6

    Comment corriger ce probleme?

    Pour information cipherblock(decipherblock(x)) = x
    Et j'utilise decipher uniquement sur des fichiers codés par cipher!!
    Si quelqu'un a une idée.
    Laurent

  2. #2
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Pour ton probleme, non.

    A part peut etre te demander de poster un code minimum mais compilable afin qu'on puisser tester.

    Sinon pour ton code, j'aimerais comprendre l'utilite des 4 fread et fwrite.

    Il vaut mieux eviter les read/write de 1, ca multiplie les appels systemes et ralenti considerablement le programme.

    Donc, peux-tu nous en monter un peu plus histoire qu'on voie quoi sert a quoi et quoi est quoi ?
    Don't worry, be serious.
    La vie est courte. Prenez votre temps.

    Jack.

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Citation Envoyé par Jack_serious
    Il vaut mieux eviter les read/write de 1, ca multiplie les appels systemes et ralenti considerablement le programme.
    Bof, sachant que c'est bufferisé...
    Mais c'est vrai qu'il vaut mieux faire qu'un seul fread/fwrite

  4. #4
    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 Gruik
    Bof, sachant que c'est bufferisé...
    Mais c'est vrai qu'il vaut mieux faire qu'un seul fread/fwrite
    Les read()/write() ? Pas par le C en tout cas... C'est peut être bufferisé par le système. Qu'en pense POSIX.1 ?
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Non mais je parlais des fread() / fwrite() de l'exemple de laurent

  6. #6
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par Gruik
    Non mais je parlais des fread() / fwrite() de l'exemple de laurent
    Pas garanti.

    La bufferisation est faite par le systeme et on peut la desactiver.

    Exemple sur Unix:
    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
     
     
      struct termios        line_police;
     
      if (ioctl(1, TIOCGETA, &line_police) < 0)
        {
          perror("ioctl get");
          return (EXIT_FAILURE);
        }
      line_police.c_lflag &=  ~(ICANON);
      if ((ioctl(1, TIOCSETA, &line_police)) < 0)
        {
          perror("ioctl set");
          return (EXIT_FAILURE);
        }
      return (EXIT_SUCCESS);
    Ici la bufferisation sur la sortie standard est desactivee.
    Don't worry, be serious.
    La vie est courte. Prenez votre temps.

    Jack.

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Ah okay

Discussions similaires

  1. le em de firefox n'est pas pareil que les autres ?
    Par clavier12AZQSWX dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/04/2010, 13h33
  2. La somme de valeurs numeriques n'est pas celle que j'attends.
    Par jeanphi45 dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 02/04/2010, 17h19
  3. Réponses: 0
    Dernier message: 24/08/2009, 20h30
  4. [SQL-Server] La fonction mssql_connect n'est pas reconnue. Que faire ?
    Par ecco27 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/03/2008, 21h29
  5. l'objet user que j'ai créé n'est pas accessible
    Par kendjo dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/07/2007, 17h25

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