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
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
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; }
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; }
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 ?).
C'est-à-dire le code devient :
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?
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; }
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.
Et donc comment je peux savoir combien du temps a besoin une opération de lecture sur ma machine?
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.
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 ?
Partager