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 :

ecrire dans un fichier une immense quantité de données


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 39
    Par défaut ecrire dans un fichier une immense quantité de données
    bonjour tout le monde

    s'il vous plait est ce que quelqu'un pourrait m'indiquer comment écrire une quantité importante de donées dans un fichier, cette quantité peut depasser le 1G, et le type est aléatoire (ça pourrait être une suite de "0" ou "FF" ,, n'importe quoi ) ,, et en utilisant la fonction "fprintf" biensur,

    merci d'avance ,,

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 977
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 977
    Par défaut
    Koe,

    [TROLL]

    Une suggestion : commencer par la 1ère donnée, et s'arrêter une fois la dernière écrite.

    [/TROLL]

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 521
    Par défaut
    Il faut ouvrir ton fichier avec fopen(), écrire dedans avec fprintf() par exemple, et le refermer avec fclose().

    Pour écrire une grande quantité de données, il suffit de faire une boucle. Avec for(), par exemple, tu peux demander à ton programme de répéter n fois ta commande fprintf.

    Jusqu'à 1 Go ou un peu plus loin, tu n'auras pas de problème. Par contre, passé 2 Go, il faut vérifier si ton système de fichiers est capable de prendre en charge les fichiers dits « large » en anglais. Il est très fréquent que 2 Gio soit une limite maximum pour les fichiers.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 39
    Par défaut
    Bonjour tout le monde, le problème est résolu ,,, j'ai essayé de developper le code suivant:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
     
     
     
    int main(int argc, char* argv[]) {
        FILE* fp_outfile;
        int len, count;
        unsigned char bytes[1024 * 1024];
        time_t start, finish, difference;
     
        memset(bytes, 0xAA, sizeof(bytes));
     
      {
            len = atoi(argv[2]);
            count = len;
            if (len > 0) {
                fp_outfile = fopen(argv[1], "w+");
                start = time(NULL);
                while (len > 0) {
                    fwrite(bytes, 1, sizeof(bytes), fp_outfile);
                    --len;
                }
                finish = time(NULL);
                difference = finish - start;
                fclose(fp_outfile);
                printf("wrote %d megabytes in %d seconds\n", count, (int)difference);
            }
        }
        return 0;
    }
    ça marche parfaitement,,, mais j'ai pas trouvé un autre moyen plus precis aue "time(NULL)" ,,, cette fonction renvoir le temps écoulé EN SECONDES depuis le 1er janvier 1970 , je me demande s'il y avait un autre outils de mesure plus fin , en millisecondes par exemple ?

  5. #5
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    j'ai pas pris de café, mais il me semble que count le cas présent vaut la quantités d'octets, et non de méga octets.
    printf("wrote %d megabytes in %d seconds\n", count, (int)difference);

    ensuite, pour avoir le temps passé, si tu es sous linux, tu peux utiliser la commande time, qui est géniale pour ça.
    time ./monprogramme

    va te donner le temps passé en mode système, très pratique pour avoir une idée du temps passé dans les entrées sorties.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 39
    Par défaut
    merci phi1981 ,, j'ai essayé deja la commande time, mais après son éxecution on aura 3 champs qui apparaissent : Real , user, et sys ,, je ne savais pas la différence entre ces trois champs. j'ai besoin de la signification précise de chaque champ, merci d'avance

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 39
    Par défaut
    bon c'est je j'ai trouvé sur le father google:
    - Real : the elapsed real time between invocation and termination, (le temps total pour l'exécution de la commande)
    - user : the user CPU time (the sum of the tms_utime and tms_cutime values in a struct tms as returned by times.

    - sys : the system CPU time (the sum of the tms_stime and tms_cstime values in a struct tms as returned by times


    bon pour la première definition , it's OK , por la 2 eme et 3 eme , je me demande c'est qui ce tms_utime, tms_cutime, tms_time et tms_cstime ?

  8. #8
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Platon d'athene Voir le message
    je me demande s'il y avait un autre outils de mesure plus fin , en millisecondes par exemple ?
    oui

    Dans la rubrique sources, sous-rubrique Gestion des Dates, il y a une fonction de mon cru pour récupérer le temps réel absolu en micro-secondes ..

    ici


  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 39
    Par défaut
    salut tout le monde

    souviron, j'ai enfin pu rectifier la fonction , j'ai obtenu une precision en microsecondes , avec la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gettimeofday(&start, NULL);
    ,,,,, on peut la mettre comme une sonde au debu et a la fin de chaque bloc de code qu'on desir savoir la durée de son éxécution, et soustraire les deux valeurs par la suite avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    timersub(&finish, &start, &difference);
    ,,,,,,,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire dans un fichier à une ligne donnée
    Par Matt014 dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2011, 22h11
  2. Ecrire dans un fichier une image et un texte (un tableau)
    Par GatH7614 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 04/11/2010, 11h32
  3. Réponses: 3
    Dernier message: 19/09/2008, 10h46
  4. Ecrire dans un fichier une liste de liste
    Par Victoria007 dans le forum Général Python
    Réponses: 4
    Dernier message: 12/03/2008, 10h55
  5. Réponses: 25
    Dernier message: 13/09/2007, 15h43

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