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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 45
    Par défaut écritures concurrentes dans un fichier
    salut à vous,
    est ce que c'est sûr d'avoir deux threads qui écrivent concurrement dans un même fichier si le fichier est protégé par un mutex?
    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
     
    char * p1_id = "proc1";
    char * p2_id = "proc2";
    FILE * f = fopen("data", "a");
    pthread_mutex_t lock;
    void p1() {
       pthread_mutex_lock(&lock);
       fwrite(p1_id, 5, 1, f);
       pthread_mutex_unlock(&lock);
    }
    void p2() {
       pthread_mutex_lock(&lock);
       fwrite(p2_id, 5, 1, f);
       pthread_mutex_unlock(&lock);
    }
    p1 et p2 sont appelées par deux processus différents. est ce que c'est correct?

    merci

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par qouify
    est ce que c'est sûr d'avoir deux threads qui écrivent concurrement dans un même fichier si le fichier est protégé par un mutex?
    Bin oui carrément plus sûr que de ne pas utiliser le thread

    Citation Envoyé par qouify
    p1 et p2 sont appelées par deux processus différents. est ce que c'est correct?
    Tu veux surement dire "par deux thread" différents, il ne faut pas confondre thread et processus, si cétait par deux processus différents, tu serais alors passé par un fork() (sous linux du moins)


    A savoir que s'il faut que les écritures se fassent dans un ordre précis, tu peux également utiliser la synchronisation avec pthread_cond_wait et pthread_cond_signal
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 45
    Par défaut
    ok merci pour l'info. oui effectivement je voulais parler de threads et non de processus.

    sinon autre question sur les entrées sorties. est ce que vous savez si les écritures avec fwrite sont synchrones ou si les données sont bufferisées pour être écrites en blocs?

    si par exemple un thread écrit en fin de fichier et l'autre lit en début, est ce que dès que j'ai fait le fwrite les données sont lisibles?

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Heu il me semble que la fonction fwrite est bufferisée, du moins elle passe par un tampon et n'écrit donc pas directement dans le fichier.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 45
    Par défaut
    ah mais ca m'arrange pas du tout ça.
    et est ce qu'il y a un moyen de forcer fwrite (ou avec une autre fonction) à vider son buffer après chaque appel?

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par qouify
    ah mais ca m'arrange pas du tout ça.
    et est ce qu'il y a un moyen de forcer fwrite (ou avec une autre fonction) à vider son buffer après chaque appel?
    Je ne saurais t'en dire plus pour le moment désolé, d'ailleurs je ne sais même s'il y a une corrélation entre le buffer de frwite et l'impact sur l'écriture comme tu le mentionne.... je pense que le mieux serait de tester l'affaire et là encore, il se peut que le comportement de ce genre de fonction change suivant l'implémtenation

    [EDIT]

    D'après une recherche rapide il se trouve être le cas où l'écriture des données par fwrite se fait après fermeture du flux par fclose... voir: http://www.developpez.net/forums/arc...hp/t-2598.html

    [/EDIT]
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Expert éminent
    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
    Par défaut
    Citation Envoyé par qouify
    ah mais ca m'arrange pas du tout ça.
    et est ce qu'il y a un moyen de forcer fwrite (ou avec une autre fonction) à vider son buffer après chaque appel?
    fflush() est fait pour ça.

+ 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, 22h02
  2. Problème d'écriture String dans un fichier
    Par scary dans le forum Langage
    Réponses: 1
    Dernier message: 03/07/2009, 20h14
  3. [POI] Problème écriture/lecture dans un fichier Excel
    Par steuve dans le forum Documents
    Réponses: 6
    Dernier message: 02/07/2007, 15h47
  4. écriture/lecture dans des fichiers
    Par rafale001 dans le forum C
    Réponses: 14
    Dernier message: 02/03/2007, 16h59
  5. écritures concurrentes dans un fichier
    Par djmalo dans le forum C
    Réponses: 9
    Dernier message: 06/03/2005, 01h45

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