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 :

Accès simultané à un fichier


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 30
    Points : 27
    Points
    27
    Par défaut Accès simultané à un fichier
    Bonjour,

    j'ai un programme en C++ qui écrit des données dans un fichier texte en continu.
    Maintenant, un autre programme (en JAVA) doit avoir accès à ces données en même temps.

    Est ce que lorsque le fichier est ouvert par le programme en C++, je peux y avoir accès avec le prog JAVA?

    Est ce qu'il est préférable d'écrire les données puis de fermer le fichier ensuite pour que JAVA puisse y accèder?
    Dans ce cas là, si JAVA y accède pendant que j'essaye d'écrire dedans, que se passera-t-il?

    Merci pour votre aide


    ToraTora.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Il vaut mieux mettre en place des verrous lecteurs/écriveurs oui.
    Boost ftw

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Il est plus que vraisemblable que le système d'exploitation "verrouillera" le fichier quand il est ouvert par l'une des applications, que ce soit par l'application java ou par l'application C++...

    L'idéal est donc de n'ouvrir le fichier - que ce soit en lecture dans l'application java ou en écriture dans l'application C++ - que lorsque l'application a réellement besoin d'accéder à / d'écrire une information dans le fichier.

    L'avantage, c'est que les deux langages fournissent des classes de flux de fichier, et que les classes de flux de fichier réagissent, finalement, de la même manière en cas de tentative d'ouverture d'un fichier verrouillé par le système d'exploitation : elles lancent une exception, à laquelle on peut s'attendre dans un bloc try et récupérer dans un bloc catch

    L'idée de base est donc relativement simple (à adapter selon le langage ): en voici l'algorithme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    soit ok est un booléen
    FAIRE
        TRY
            ouverture du fichier
            ce qu'il faut faire
            ok  <-- vrai
        FIN TRY
        CATCH exception qui va bien
            temporisation éventuelle
            ok <-- faux
        FIN CATCH
    JUSQUE ok = vrai
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par koala01 Voir le message
    L'avantage, c'est que les deux langages fournissent des classes de flux de fichier, et que les classes de flux de fichier réagissent, finalement, de la même manière en cas de tentative d'ouverture d'un fichier verrouillé par le système d'exploitation
    Ce n'est pas le comportement par défaut du C++, qui va plutôt fournir un flux sur lequel toutes les opérations sont sans effet...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Il est plus que vraisemblable que le système d'exploitation "verrouillera" le fichier quand il est ouvert par l'une des applications, que ce soit par l'application java ou par l'application C++...
    Sur tous les systèmes d'exploitation que je connais le verrouillage n'est pas automatique...
    Boost ftw

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ça l'est sous Windows si tu utilises les fonctions Win32 (CreateFile()) ou la version modifiée de fopen() de microsoft, fopen_s() (ce qui la rend pas-completement-inutile).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Ce serait pas plus simple d'utiliser un procédé d'échange de données conçu spécifiquement pour ce genre de choses? (socket, pipe ou encore flux console ce qui est encore le plus facile à faire en C ou C++ et qui est souvent utilisé par les programmes sous linux)
    La ce sera vraiment n'importe quoi, soit ça fonctionnera une fois sur deux soit ce sera pas portable pour un sou, il y a aussi de fortes chances que l'optimisation soit naze, que le fichier se remplisse non stop jusqu'à surcharger le disque, voire même d'avoir des blocages infinis.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En effet.
    Utiliser un fichier pour le partage de données d'exécution est une très mauvaise idée.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. accès simultanément sur un fichier via ssh
    Par MSM_007 dans le forum Linux
    Réponses: 0
    Dernier message: 04/05/2010, 11h18
  2. Accès simultané a un même fichier
    Par Slyders dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 11/08/2009, 18h04
  3. Accès simultané au même fichier
    Par Oprichnik dans le forum Langage
    Réponses: 8
    Dernier message: 16/09/2006, 13h17
  4. Eviter l'accès simultané à un fichier
    Par bestdomdom dans le forum Général Python
    Réponses: 6
    Dernier message: 04/09/2006, 12h22
  5. Accès simultané au même fichier pour modification
    Par Dominique_78 dans le forum Langage
    Réponses: 5
    Dernier message: 21/02/2006, 18h53

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