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/écriture dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de myzu69
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 220
    Par défaut lecture/écriture dans un fichier
    Bonjour,

    je suis en train de faire un programme traitant des séquences du génôme donc potentiellement assez grosses (compter plusieurs milliards) et je m'interroge sur la manière la plus efficace de lire et d'écrire dans un fichier. Pour l'instant j'ai fait ce qui se fait le plus classiquement, un pointeur de fichier et je lis ou écris séquentiellement toutes les données.

    Ce qui serait idéal ce serait de charger le fichier dans ma structure de données automatiquement, sans avoir à le lire, ce qui ne devrait pas poser trop de problème étant donné que c'est moi qui l'écrit en parcourant ma structure.

    J'ai pensé au memory mapping mais peut-être n'est-ce pas la méthode la plus rapide ou existe-il une méthode qui serait aussi rapide mais portable (mmap ne fontionne que sur UNIX non ?). Je programme sous Linux actuellement mais j'aimerais bien que mon soft puisse tourner sur Windows.

    Voilà, si quelqu'un pouvait m'éclairer un peu ce serait fort aimable à lui

  2. #2
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonjour,

    Citation Envoyé par myzu69
    Pour l'instant j'ai fait ce qui se fait le plus classiquement, un pointeur de fichier et je lis ou écris séquentiellement toutes les données.
    Remplis-tu ta(tes) structure(s) octet par octet ?

    Si tu as une structure (ou plusieurs) ne serait-il pas préférable de la (les) lire "binairement" ? Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    struct stGenome {
        champs1 ;
        champs2 ;
        ....
    } ;
     
    // Dans le main
    struct stGenome tabGenome[X] = {0} ;
     
    // Après ouverture du fichier, lecture de X structures
    ret = fread(&tabGenome, sizeof(struct stGenome), X, fdFile) ;
    La fonction fread est portable d'un système à un autre.
    Le problème, c'est la compatibilité de tes fichiers si tu dois modifier ta structure. Il te faudra faire un programme pour passer de l'ancienne à la nouvelle structure.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    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 485
    Par défaut
    Le memory mapping est ce qu'il y a de plus approprié dans ce genre de cas de figure. C'est aussi ce qu'il y aura de plus optimisé dans la mesure où tu laisses toute latitude au système pour gérer le fichier comme il l'entend.

    mmap() est conforme POSIX 1.2001 selon la man page, donc relativement portable. Windows devrait également la reconnaître (jamais essayé), sinon l'OS de Redmond dispose de ses propres primitives : http://msdn.microsoft.com/en-us/library/ms810613.aspx

Discussions similaires

  1. lecture/écriture dans un fichier texte
    Par the watcher dans le forum Delphi
    Réponses: 23
    Dernier message: 15/05/2007, 10h57
  2. lecture/écriture dans un fichier
    Par benkunz dans le forum Langage
    Réponses: 3
    Dernier message: 10/04/2007, 11h35
  3. Réponses: 47
    Dernier message: 28/01/2007, 19h39
  4. lecture écriture dans un fichier
    Par poukill dans le forum C++
    Réponses: 9
    Dernier message: 23/05/2006, 11h02
  5. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15

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