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 :

[création d'un fichier]


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 35
    Points : 8
    Points
    8
    Par défaut [résolu][création d'un fichier]
    Bonjour à tous,

    je voudrai savoir comment créer un fichier d'une certaine taille.
    En gros faire une allocation mais sur le disque dur(peu m'importe ce qu'il y aura dans le fichier)
    je pensais utiliser un fwrite en indiquant la taille désiré de mon fichier, mais je ne sais pas quoi mettre comme pointeur.
    Si quelqu'un a une autre idée moins barbare je serai content de la connaitre

    merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Points : 78
    Points
    78
    Par défaut
    si tu est sous windows tu peux utiliser _creat et ensuite _chsize. sinon en utilisant fwrite tu alloue de la mémoire de la taille que tu veux mettre pour ton fichier et tu utilises ce pointeur.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 35
    Points : 8
    Points
    8
    Par défaut
    désole de ne pas l'avoir précisé mais je suis sous linux ^_^

    je ne sais pas si je peux allouer la memoire que je désire pour le fichier que je veux créer car la taille qui m'est nécessaire dépasse de loin mes capacité en mémoire vive

  4. #4
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 52
    Points : 43
    Points
    43
    Par défaut
    mais sans indiscrétion, c'est quoi le but???
    remplir un fichier ENORME avec rien ???
    quand on voit ce qu'on voit et quand on entend ce qu'on entend on a bien raison de penser ce qu'on pense
    Coluche

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 35
    Points : 8
    Points
    8
    Par défaut
    le but est ensuite d'utiliser mmap sur ce fichier créé, et d'y metre ce que je veux dedans

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    je te conseil à première vu de le faire avec write ou fwrite su te sent et de faire un truc par exemple :
    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 *i;
    int fd; 
     
    i = (int *) malloc(sizeof(int) *x); //x = ce que tu veux
     
    memset(i, -1, sizeof(int)*x);
     
    //open ...
     
    write(fd, i, sizeof(int)*x);
     
     
    fsync(fd); // pour être à peu prés sur que c'est écrit sur le disque 
     
    //Ensuite tu fait ton mmap et c'est bon
    Voilà essaye ca est je te souhaite bonne chance.
    @++.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 35
    Points : 8
    Points
    8
    Par défaut
    tu penses que le malloc va passer? quand je vais lui demander de m'allouer 800 Mo d'entiers?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    En théorie oui car chaque processus possède un espace d'adressage s'étendant jusqu'à 3Go donc je crois que t'as de la marge quand même.

    Bien sûr il te suffit d'essayer pour en être certain.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 35
    Points : 8
    Points
    8
    Par défaut
    merci

  10. #10
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 32
    Points : 17
    Points
    17
    Par défaut
    Si tu décides de faire un malloc sur le pointeur ou se trouve ton fichier, n'oublie pas de rajouter +1 pour le caractère de fin de ligne....ca peut de causer des soucis....

  11. #11
    Membre habitué Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Points : 129
    Points
    129
    Par défaut
    regardes mmap : c'est une fonction qui fait une projection d'une zone mémoire sur le disque dur.
    Tom

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Je pense plutôt que mmap fait une projection d'un fichier ouvert vers une zone mémoire qui se trouve dans le tas du processus.

    @++.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 35
    Points : 8
    Points
    8
    Par défaut
    Pour moi mmap fait une projection d'un fichier en memoire vive, et il monte et descends les infos par page du dd a la ram quand il en a besoin, donc c tres performant quand tu lit un fichier en sequentiel

    voila

    merci a tous mon probleme est résolu

    @+

  14. #14
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    je voudrai savoir comment créer un fichier d'une certaine taille.
    Je pige pas trop votre délire là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    FILE * file = fopen( "res.bin", "wb" );
    int size = 100000;
    int i;
     
    for ( i = 0; i < size; ++i )
    {
        unsigned char zero = 0;
        fwrite( &zero, 1, 1, file );
    }
     
    fclose( file );
    Un truc du genre ça suffit non ?
    C'est portable ...

    Apres, si tu veux un trux comparable a l'allocation en RAM et qui torche sous WIndows :

    int size = 1000000;

    HANDLE hFile = CreateFile( ... );
    SetFilePointer( hFile, size, 0, FILE_BEGIN );
    SetEndOfFile( hFile );
    CloseHandle( hFile );
    Sous WinNT ton fichier contiendra des zeros, sous 9x c'est aléatoire (reste d'anciens fichiers ...). Ca va très vite.
    Je connais pas l'équivalent sous UNIX (suffit de trouver la fonction qui permet de définir la fin d'un fichier).

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 35
    Points : 8
    Points
    8
    Par défaut
    oui ce serait en effet plus ce que tu mets dans ta derniere proposition qu'il me faudrait, mais je ne connais pas l'equivalent sous linux je v chercher.
    merci

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 35
    Points : 8
    Points
    8
    Par défaut
    pour ceux que ca interesse voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fic=open("/home/truc/aaaaaa.bin",O_WRONLY|O_CREAT|O_TRUNC);
    ftruncate(fic,209715200*4);
    close(fic);
    Ce qui nous fait un fichier de 800Mo

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

Discussions similaires

  1. Création d'un fichier XML
    Par fantasio31 dans le forum Général Python
    Réponses: 2
    Dernier message: 09/09/2004, 17h06
  2. [XML] Création d'un fichier XML
    Par TheDarkLewis dans le forum Langage
    Réponses: 6
    Dernier message: 24/07/2004, 18h27
  3. ligne d'entête création d'un fichier XML
    Par cduterme dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 23/02/2004, 15h30
  4. FOXPRO 2.6 : erreur créations du /des fichiers CAB
    Par breihtiti dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 16/11/2002, 11h28
  5. [Kylix] Création d'un fichier lien
    Par DrQ dans le forum EDI
    Réponses: 2
    Dernier message: 14/05/2002, 21h30

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