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 :

lecture sur disque


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Points : 51
    Points
    51
    Par défaut lecture sur disque
    Bonjour,

    C'est quoi une opération de lecture sur disque et comment je peux lancer un exemple d'une opération de lecture en utilisant C++?

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Bah c'est une lecture sur disque... Comme un accès à un fichier.

    Regarde du coté de std::fstream

    Petit exemple rapide
    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
    //exemple.txt
    1 4.2 blah
     
    // main.cpp
    #include <fstream>
    #include <string>
    #include <cmath>
     
    int main() {
       int i;
       double d;
       std::string str;
     
       std::ifstream is("exemple.txt");
       is >> i >> d >> str;
       assert(i == 1);
       assert(std::abs(d - 4.2) < 1e-5);
       assert(str == "blah");
       return 0;
    }

  3. #3
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Points : 51
    Points
    51
    Par défaut
    Merci pour votre réponse

    Si je veux mesurer le temps consacré par le système pour réaliser une lecture, est ce que ce code est juste ? Ou je dois déplacer les instructions mesurant ce temps ?

    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
     
    int main() 
    {
    	double temps;
    clock_t start;
    start = clock();
    ifstream fichier("exemple.txt"); 
        char caractere; 
        while(fichier.get(caractere))
    	temps = (double)(clock()-start)/(double)CLOCKS_PER_SEC;
     
        fichier.close();                     
     
    					cout<<temps<<endl;
     
     
    	system("PAUSE");
        return 0;
    }

  4. #4
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    La lecture octet par octet ça risque d'être lent.
    Sinon, il faut prendre le temps après la lecture, et pas à chaque itération (";" manquant ?).

  5. #5
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    Sinon, il faut prendre le temps après la lecture, et pas à chaque itération.
    C'est-à-dire le code devient :

    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
     
    int main() 
    {
    	double temps;
    clock_t start;
    start = clock();
    ifstream fichier("exemple.txt"); 
        char caractere; 
        while(fichier.get(caractere)) 
        fichier.close();                     
        temps = (double)(clock()-start)/(double)CLOCKS_PER_SEC;
        cout<<temps<<endl;
     
    	system("PAUSE");
        return 0;
    }
    Les résultats affichés changent d'une exécution à une autre (0.012 s, 0s...) et plusieurs fois me donne 0 seconde. Je veux un temps exacte pour une opération de lecture sur disque y'a t'il une autre manière pour avoir cette information?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Etant donné qu'au premier caractère lu tu refermes ton fichier, le résultat n'est pas surprenant.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Points : 51
    Points
    51
    Par défaut
    Et donc comment je peux savoir combien du temps a besoin une opération de lecture sur ma machine?

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    En fait, le temps de lecture dépend des circonstances.

    Le disque dur lui même est très lent à lire: attendre que le fichier se présente devant la tête de lecture, puis prendre le temps de faire tourner le disque en lisant.

    Du coup, tous les OS utilisent des systèmes de cache en mémoire des fichiers lus récemment.
    En fait, les disques durs eux-même en font autant, dans une mémoire interne au disque.

    Du coup, si tu lis le même fichier dix fois, normalement, seule la première lecture sera longue.

    Pour comparaison, un processeur à 2GHz effectue une instruction addition en a peu près une nanoseconde.
    Un disque dur, lui, tourne à l'ordre de la milliseconde, soit un million de fois plus lentement.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Points : 1 211
    Points
    1 211
    Par défaut
    Je ne sais pas si comparer un processeur (traitement) à un disque dur (stockage) est vraiment pertinent ...
    leternel l'a d'ailleurs montré une instruction donnée s'exécute en un temps fixe alors qu'une opération de lecture, suivant le "point de vue" que l'on adopte, a un temps d'"exécution" variable. Rien que l'emplacement physique du fichier sur le disque a des impacts sur le temps de lecture.
    D'ailleurs il faudrait définir ce qu'est une opération de lecture. Parce qu'un read de 1 octet et un read de 10 Mio sont tous les deux des opérations de lecture ... et pourtant le temps va énormément différer. On cherche à mesurer quoi là exactement ? La latence ? La bande passante ?

Discussions similaires

  1. Problème lecture sur disque
    Par papao dans le forum Administration
    Réponses: 4
    Dernier message: 04/09/2012, 11h35
  2. Réponses: 0
    Dernier message: 30/12/2011, 14h33
  3. pb de lecture de fichier sur disque
    Par tom31 dans le forum C
    Réponses: 1
    Dernier message: 16/03/2008, 10h08
  4. [Strategie] Lecture depuis le réseau et écriture sur disque dur
    Par Amine_sas dans le forum Général Java
    Réponses: 2
    Dernier message: 18/11/2007, 14h23
  5. [W2003S] lecture seule sur disque reseau
    Par corwin44 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 15/08/2007, 15h49

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