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 :

fichier vide après command cp (unix)


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut fichier vide après command cp (unix)
    Bonjour,

    J'ai un souci avec l'utilisation de la command 'cp' utilisé à partir d'un programme C sous Unix et lancé via la command 'system'

    Le contexte :
    Je dois, dans le cadre d'un traitement itératif, copier un fichier squelette (ex : toto.pdf) sous un autre nom (incrémenté) (ex : toto.pdf[i] où i de 0 à n)

    Extrait du code (remanié pour être plus clair) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    sprintf ( tmp, "cp  toto.pdf toto.pdf[i] >/dev/null\0";  
     
    if (system ( tmp ) == 0 )
    {
       Trace(idtrace, "commande system OK");
    }
    else
    {
       Trace(idtrace, "commande system KO");
    }
    ...
    Mon problème
    Le traitement fonctionne bien pendant des jours (24h/24h ou presque) et des jours, et puis d'un seul coup, il dysfonctionne ... et se remet à marcher.

    Après recherche, il s'avère que les fichiers toto.pdf[i] posant problème ont été créés à vide suite à la copie, d'où une erreur lors de la tentative de lecture (fopen) plus tard dans le traitement.

    Mon unique piste est un problème de conflit entre la charge (itération très rapide) du traitement et la commande 'cp'

    Quelqu'un saurait'il ce qui peut faire qu'une copie entraîne la création du fichier cible à vide ?

    Quelqu'un aurait'il une (autre?) idée de piste ?

    Merci d'avance

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    J'ai du mal a voir le rapport avec le C.

    (Est-ce que c'est un systeme de fichier monte par NFS par hasard?)

  3. #3
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Bonjour,

    Pourquoi passer par la function systeem?

    Ne serait-il pas plus simple de faire soi-même un fonction pour copier un fichier?

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut command system cp ko suite
    Bonjour,

    Merci tout d'abord pour vos réponses.

    Désolé du retard, j'ai du mettre ce sujet (qui reste d'actualité) en suspens pendant quelques temps (et je n'ai pas reçu d'alerte).

    Mes réponses aux remarques qui m'ont été faites :
    - la rapport avec le C : le programme est en C/Unix et a besoin de performance. L'appel à des commandes system à partir d'un programme C ne devrait pas poser de problème. Cela n'en pose d'ailleurs pas lorsque la machine où tourne le programme n'est pas surchargé (99% des cas à la louche).
    - le fichier est monté en JFS2 (serveur local de production)
    - pourquoi une commande system : la fonction 'cp' est sensée copier nativement un fichier vers un autre. Pourquoi en redévelopper une autre ? j'ai besoin de performance et de fiabilité. Mais je reste ouvert à toute proposition.

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Citation Envoyé par leo77 Voir le message
    - pourquoi une commande system : la fonction 'cp' est sensée copier nativement un fichier vers un autre. Pourquoi en redévelopper une autre ? j'ai besoin de performance et de fiabilité.
    Justement parce que tu as besoin de performance ? Tu réalises que system() commence par forker, puis créé un shell qui parse la chaine que tu lui passe, qui fork à son tour, et exécute le "cp" ?

    Enfin bref, là n'est pas le problème. Se pourrait-il que ton filesystem soit plein, ou que ton quota soit atteint ?

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut command systeme cp KO
    Bonjour,

    - le service de production me dit qu'il n'y a aucun problème au niveau de la taille du file system
    - pour ce qui est du quota, je vais retourner me renseigner
    - utilisation de CP : par quoi recommandes-tu de remplacer l'utilisation de 'cp' ? La création d'une fonction de copie de fichier ne va-t'elle pas prendre plus de temps ?

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par leo77 Voir le message
    - utilisation de CP : par quoi recommandes-tu de remplacer l'utilisation de 'cp' ? La création d'une fonction de copie de fichier ne va-t'elle pas prendre plus de temps ?
    • Si tu passes par system() => fork() + exec() + copie de fichier
    • Si tu implémentes ta fonction de copie ==> copie de fichier

    Il faut bien voir que fork + exec, c'est long et en plus c'est gourmant en ressources. Donc si tu cherches réellement la performance, faut oublier et mettre un peu les mains dans le code.

Discussions similaires

  1. Fichier vide après une écriture dedans.
    Par jerrypeeren dans le forum C++
    Réponses: 8
    Dernier message: 26/11/2012, 00h55
  2. [1.x] Fichiers générés après commandes
    Par remibc dans le forum Symfony
    Réponses: 11
    Dernier message: 03/05/2012, 14h55
  3. commande awk-fichier vide
    Par rico3434 dans le forum Linux
    Réponses: 3
    Dernier message: 30/10/2007, 13h32
  4. Réponses: 3
    Dernier message: 05/10/2007, 09h37
  5. La commande sed renvoie un fichier vide
    Par aaronw dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/09/2006, 11h46

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