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

Java Discussion :

[Système][Appel system linux]Différence dossier /link


Sujet :

Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 7
    Points : 6
    Points
    6
    Par défaut [Système][Appel system linux]Différence dossier /link
    Voilà j'ai un petit soucis avec les appel system sous unix en java :

    Voilà le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    File dir=new File(root);
    			File []files=(File[])dir.listFiles();
    			for (int i = 0; i < files.length; i++) {
    			      if (files[i].isDirectory()){
    			      	Process p=Runtime.getRuntime().exec("MON APPEL SYSTEME");
    			      	if(p.exitValue()==0)
    			      		explore( files[i].toString());
    			      } 
    			      else allFiles.add(files[i].toString());
    Ceci est une boucle qui recursivement liste les dossiers a partir d'une racine "root", ceci marche très bien le problème est que sous linux il y a très souvent des liens symboliques auto-récursif --> ma question est
    Comment évite-t-on la boucle infinie?
    Comment évite-t-on les liens symboliques? ( ln -s)
    car si je liste ces dossier c'est pour réaliser des checksums sur des fichiers pour en vérifier l'intégrité après coups.(exercice de sécurité informatique)

    j'ai la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process p=Runtime.getRuntime().exec(" if ( -l /boot )");
    qui permet de lancer un appel système
    et l'instruction pour récupérer la valeur de retour

    suffirait-il que je fasse un scipt bash de le lancer depuis là?

    Vos suggestions sont les biens venues.
    N'oubliez pas que le but finale est non seulement d'éviter les liens symboliques, mais aussi d'éviter les boucles infinies...
    Merci d'avance à tous

  2. #2
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Premièrement, pour éviter de boucler, la seule solution est de conserver une liste des répertoires où tu es déjà passé et tester avant de rentrer dans un nouveau répertoire si tu n'as pas déjà traité ce répertoire.

    Pour l'identification des liens symboliques, je ne sais pas si cela est détecté par l'API Java (rien à ce sujet dans la doc sur le type "File"). Je n'ai jamais essayé !

  3. #3
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Pour détecter un lien symobilique ou hard, je ne vois que l'exécution d'une commande "system" dédiée

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par ego
    Premièrement, pour éviter de boucler, la seule solution est de conserver une liste des répertoires où tu es déjà passé et tester avant de rentrer dans un nouveau répertoire si tu n'as pas déjà traité ce répertoire.
    Oui mais comment faire la différence entre un sous-dossier avec le même nom que le dossier parent et une boucle?
    Citation Envoyé par ego
    Pour l'identification des liens symboliques, je ne sais pas si cela est détecté par l'API Java (rien à ce sujet dans la doc sur le type "File"). Je n'ai jamais essayé !
    Effectivement dans java rien ne le permet
    c'est bien pour cela que j'en vient au appel système grâce au process. (voir plus haut)

    Le problème est bien comment faire pour lancer un appel système avec des paramètres ...
    et de recupérer les valeur de retour

  5. #5
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    je ne comprend pas ton histoire de fils qui a le même nom que le père ?
    Quand tu sauve un nom de répertoire déjà lu, il faut sauvegarder tout le chemin depuis la racine '/' (le absolutepath)
    Pour exécuter une commande système avec des paramètres, il faut simple créer une String qui représente exactement ce que tu aurais écris en ligne de commande. Pour le résultat, le retour de la commande Runtime.exec(String[] cmd) est un objet Process. Sur un objet Process tu peux récupérer un OutputStream (cf. http://java.sun.com/j2se/1.4.2/docs/...g/Process.html)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 7
    Points : 6
    Points
    6
    Par défaut merci
    merci beaucoup j'ai bel et bien dut faire avec des absolutepath
    en fait c'est sur que cela n'a pas de sens sinon..
    merci beaucoup pour tes réponses
    je met le topic à résolu

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/11/2005, 22h40
  2. bizarrerie avec l'appel system read sous linux.
    Par Hypnocrate dans le forum C
    Réponses: 20
    Dernier message: 20/11/2005, 02h47
  3. Réponses: 4
    Dernier message: 02/11/2005, 16h16
  4. redirection operateur flue >> appel system
    Par philippe V dans le forum MFC
    Réponses: 9
    Dernier message: 16/03/2005, 18h01
  5. 2 systeme linux identique sur 2 hd differents
    Par tomnie dans le forum Administration système
    Réponses: 17
    Dernier message: 30/03/2004, 11h17

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