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 :

Fonction rename : "cross link device" error


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 67
    Points : 55
    Points
    55
    Par défaut Fonction rename : "cross link device" error
    Bonjour,
    J'utilise dans le cadre d'un batch la fonction rename appartenant à la librairie stdio.h. J'execute mon batch sur une plateforme Unix
    Je l'utilise comme ceci :
    rename(rep1/file, rep2/file).
    Le problème est que mon répertoire source est sur un file système et que mon répertoire de destination est sur un autre file systeme!!!!!
    Ce qui me génère une erreur cross link device.
    Connaisssez vous un moyen de contourner ce problème ou de le corriger.
    Je dois préciser que par contrainte du client , je ne peux pas me permettre d'avoir mon répertoire source et destination sur le même file system.
    Merci d'avance de votre aide

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Bonjour,

    Il n'existe pas de fonctions autres que rename() permettant de faire ce que tu veux.

    la seule solution est de copier le fichier source vers la destination puis, si la copie s'est bien passée, supprimer le fichier source.

    Attention, il n'existe pas à ma connaissance de fonctions permettant de faire des copies de fichiers. Il faut donc ouvrir le fichier, le lire, l'écrire sur l'autre filesystem, puis fermer tout et enfin supprimer le fichier source.

    Pour supprimer un fichier, renseignes-toi sur la fonction unlink().
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 67
    Points : 55
    Points
    55
    Par défaut
    Merci de ton aide, c'est bien ce qu'il me semblait.
    Je vais essayer de creuser dans cette direction même si cette solution ne me plait pas trop
    Bon apres midi

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Citation Envoyé par bob33
    Merci de ton aide, c'est bien ce qu'il me semblait.
    Je vais essayer de creuser dans cette direction même si cette solution ne me plait pas trop
    [Hors sujet spécifique à l'OS]

    Pour information, c'est celle qui est utilisée pour la commande "mv" sur certaines plateformes (BSD par exemple) :
    Faire un 'rename'
    Si celui-ci plante et que errno vaut EXDEV, alors faire une copie/suppression...


    Attention, un rename sur le même filesystem ne change pas l'inode du fichier. Les liens non-symboliques pointeront donc toujorus vers le même fichier.

    En revanche, une copie puis une suppression change l'inode. les liens (symboliques ou non) sont donc tous perdus.

    Je ne connais pas de facon de faire suivre les liens (même en utilisant des commandes dites "systèmes").
    [fin du hors sujet]
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 67
    Points : 55
    Points
    55
    Par défaut
    C'est bon c'est resolu.
    je me suis débrouiller dans mon code C à utiliser la commande system() pour lui faire executer directement le mv Unix et cela fonctionne parfaitement.
    Encore Merci.

  6. #6
    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 : 67
    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 gangsoleil
    Pour supprimer un fichier, renseignes-toi sur la fonction unlink().
    Pourquoi une fonction non standard quand il existe remove() ?
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par gangsoleil
    Pour supprimer un fichier, renseignes-toi sur la fonction unlink().
    Pourquoi une fonction non standard quand il existe remove() ?
    Au choix :
    1/ Je me suis trompé entre les deux noms de fonctions
    2/ Je ne connaissais pas la fonction remove

    Moi je penche pour la 2, donc je te remercie, et m'en retourne dans mon code pour vérifier qu'il ne reste pas d'unlink dedans.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

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

Discussions similaires

  1. Fonction rename php -> Permission Denied
    Par Alain15 dans le forum Langage
    Réponses: 6
    Dernier message: 01/08/2006, 10h47
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59

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