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 :

écritures concurrentes dans un fichier


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Points : 47
    Points
    47
    Par défaut écritures concurrentes dans un fichier
    Bonjour,

    j'ai 2 processus qui écrivent dans un même fichier. Seulement voilà ils sont succeptibles d'écrire dans le fichier au même moment ce qui fait que mon fichier peut avoir au final un contenu incohérent

    Y'a-t-il une solution pour faire en sorte que si un processus écrit dans le fichier, toute autre processus est obligé d'attendre avant de pouvoir commencer à écrire dans ce même fichier ?

    Merci d'avance pour toute aide

  2. #2
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    salut,

    Quel est ton O.S. ?

    les solution à ton pb sont: sémaphores, mutex.

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jmv
    les solution à ton pb sont: sémaphores, mutex.
    [POSIX.1]
    Plutôt flock() non ?
    [/POSIX.1]

  4. #4
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Je programme sous linux

    J'ai regardé du côté des semaphores mais apperemment il faut pouvoir déterminer à l'avance le nombre de sémaphore à créer.

    Hors pour être plus précis, mes deux processus peuvent ouvrir un nombre inderterminé de fichiers.
    Si l'un ouvre un fichier et l'autre un autre fichier pas de problèmes.
    Par contre si les deux ouvrent le même fichier là il y'a problème.

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par djmalo
    Je programme sous linux <...>
    essaye flock()...

  6. #6
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par jmv
    les solution à ton pb sont: sémaphores, mutex.
    [POSIX.1]
    Plutôt flock() non ?
    [/POSIX.1]
    ah merci, je ne connaissais pas
    j'ai recherché de l'info sur flock (qui est un structure apperemment et non une fonction) donc et je suis tombé sur les fonctions fcntl() et lockf(). Je crois qu'elles peuvent être la solution à mon problème

  7. #7
    jmv
    jmv est déconnecté
    Membre confirmé Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Plutôt flock() non ?
    Oui, je savais que cette fonction existe mais je ne l'ai jamais utilisé (Elle existe aussi sous win ?)

    pour les sémaphores : tu en crée un par fichier, initialisé à 1. Mais attention aux interblocages si un processus à besoin de 2 (ou +) fichiers en même temps (d'ailleurs je pense qu'il y a autant de risque d'interblocage avec flock() ? me trompe-je ?)

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jmv
    Citation Envoyé par Emmanuel Delahaye
    Plutôt flock() non ?
    Oui, je savais que cette fonction existe mais je ne l'ai jamais utilisé (Elle existe aussi sous win ?)
    flock() est BSD
    lockf() est X-Open
    fcntl() est très répandu sous UNIX

    bref, c'est le b*rd*l habituel sous Unix...

    Sous Windows, nous avons:

    FileLock()

  9. #9
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par Emmanuel Delahaye

    flock() est BSD
    lockf() est X-Open
    fcntl() est très répandu sous UNIX
    A ce moment là, Autant utiliser les semaphores POSIX que l'on peut manipuler à l'aide des fonctions sem_* (Et celles ci sont completement POSIX, donc nettement plus portables que flock et compagnie)
    bref, c'est le b*rd*l habituel sous Unix...
    ......

  10. #10
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Merci pour toutes ces précisions

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

Discussions similaires

  1. Écriture simultanée dans plusieurs fichiers
    Par Imad_ing dans le forum C++
    Réponses: 37
    Dernier message: 12/07/2010, 23h02
  2. Problème d'écriture String dans un fichier
    Par scary dans le forum Langage
    Réponses: 1
    Dernier message: 03/07/2009, 21h14
  3. écritures concurrentes dans un fichier
    Par qouify dans le forum C
    Réponses: 34
    Dernier message: 01/08/2007, 16h41
  4. [POI] Problème écriture/lecture dans un fichier Excel
    Par steuve dans le forum Documents
    Réponses: 6
    Dernier message: 02/07/2007, 16h47
  5. écriture/lecture dans des fichiers
    Par rafale001 dans le forum C
    Réponses: 14
    Dernier message: 02/03/2007, 17h59

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