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

Langage Java Discussion :

verrouillage de fichier et lecture


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut verrouillage de fichier et lecture
    Bonjour,

    J'essaye de concevoir un système qui limiterai le nombre d'instance de mon programme qu'il est possible de lancer en même temps (1 seule).

    Pour cela, j'utilise le verrouillage de fichier RandomAccessFile.getChannel().tryLock().
    Si le programme arrive à verrouiller le fichier (1ere instance), il écrit dedans des informations.
    Si il n'arrive pas à verrouiller le fichier (instance secondaire), il lit les informations déjà écrite.

    Le problème, c'est que dans le cas d'une instance secondaire, le programme n'arrive pas à lire le contenu du fichier, car celui ci est verrouillé.
    Et je ne peux pas déverrouiller le fichier depuis la 1ere instance, car sinon l'instance secondaire arriverait à le verrouiller (et ça perd tout l'intérêt).

    Je voudrais donc pouvoir verrouiller le fichier (en écriture), mais qu'il reste accessible en lecture.

    Des idées ?

    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Plus efficace : ouvre un socket client vers un port X. Si tu ne parviens pas à l'ouvrir, ouvre ce port en serveur (pour que les instances futures puissent l'écouter). Si tu parviens à l'ouvrir, c'est que tu as affaire à une instance de ton programme qui existe déjà.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 347

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par dingoth Voir le message
    Plus efficace : ouvre un socket client vers un port X. Si tu ne parviens pas à l'ouvrir, ouvre ce port en serveur (pour que les instances futures puissent l'écouter). Si tu parviens à l'ouvrir, c'est que tu as affaire à une instance de ton programme qui existe déjà.
    la logique voudrait qu'on ouvre d'abord un port XXX en serveur, et si on y arrive pas, on se connecte dessus en client.

    Le problème, c'est que le port XXXX est défini de manière fixe. Et il y a une possibilité (minime) que ce port soit dejà occupé par un autre programme. Donc ça casse tout.

    @laclac : rien trouvé à cet endroit là

  5. #5
    Invité
    Invité(e)
    Par défaut
    l'algo de mon programme

    - ouverture et création d'un fichier (avec RandomAccessFile)
    - tentative de verrouillage du fichier, avec le FileChannel et tryLock()
    - Si le verrouillage réussi :
    ------ Ouverture d'un port TCP serveur libre (n'importe lequel)
    ------ Ecriture du numéro de port dans le fichier
    ------ Lancement d'un Thread qui va ecouter sur le port TCP
    - Si le verrouillage ne réussi pas (si il y a déjà un instance de lancée)
    ------ Lecture du fichier verrouillé et récupération du port précédemment écrit
    ------ Connexion TCP au port indiqué
    ------ Envoie d'information à la première instance via TCP

    Cette méthode est parfaite (je ne pense pas me vanter), mais elle bug au niveau : "Lecture du fichier verrouillé et récupération du port précédemment écrit"
    Dernière modification par Invité ; 10/10/2009 à 01h06.

  6. #6
    Membre très actif
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Par défaut
    Créez un fichier temporaire sans oublier d'appeler "File#deleteOnExit()"
    Les chances de collision sont très minimes je pense.

    N'oubliez (si vous utilisez SWING) de ne pas utiliser JFrame#EXIT_ON_CLOSE comme action de fermeture mais vérifiez avant la fermeture des sockets. Ce serait bête de perdre la connexion entre vos instances.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Et j'en fais quoi de ce fichier ?
    Je vois pas très bien :/

Discussions similaires

  1. [AC-2007] Verrouillage de fichier et lecture seule
    Par Accessifiante dans le forum Runtime
    Réponses: 4
    Dernier message: 23/07/2013, 20h36
  2. [fichier binaire]lecture ecriture dump
    Par parsy dans le forum Langage
    Réponses: 7
    Dernier message: 10/08/2005, 18h40
  3. Réponses: 8
    Dernier message: 09/08/2005, 11h44
  4. Réponses: 7
    Dernier message: 05/08/2005, 16h32
  5. [PDE] Editeur de fichiers en lecture seule
    Par simsky dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 13/07/2005, 12h18

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