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

Linux Discussion :

copier avec cp dans execl


Sujet :

Linux

  1. #1
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut copier avec cp dans execl
    je veux exécuter une copie en utilisant cp dans un execl en c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execl("/bin/cp","cp",path,Dest,NULL);
    path est le chemin absolu du fichierdest est le chemin absolu de la destination avec le nom de fichier différent (j'ai renommer le fichier)

    alors je reçois l'erreur suivante:

    cp: omitting directory

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 352
    Points : 42 823
    Points
    42 823
    Par défaut
    Ca ne peut pas marcher.

    execl attend en premier argument la commande, et en second les arguments de celles-ci
    donc dans ton cas se sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execl("/bin/cp",{"[nom fichier source]","[nom fichier destination]"});
    Tu as bien fait un fork avant ?

    Sinon, plus simple, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("/bin/cp source destination");
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    mais j'ai besoin de mettre tout le chemin comment je fais alors, car j'ai renommer le fichier parce qu'il existe un autre du même nom, et ces deux chemins je les récupère d'un gtk file chooser

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 352
    Points : 42 823
    Points
    42 823
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("/bin/cp [chemin source]/source [chemin_destination]/destination");
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    mais le les deux chemins je les ai en variable, est ce que la fonction system les acceptes de cette façon?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("/bin/cp", path , dest);

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Il te faut absolument lire la documentation des fonctions que tu désires utiliser. Soit tu es sous linux alors dans une console tu tapes "man execl" par exemple, soit tu es sous Windows et alors tu tapes la même commande dans ton moteur de recherche préféré. Il existe quelques sites qui vont te donner accès à la documentation.

    Tu ne peux programme à tâtons. Lire est la base de tout .

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2014
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 498
    Points : 1 178
    Points
    1 178
    Par défaut
    Bonjour,

    Déjà l'appel system() tu le bannit parce qu'il présente une importante faille de sécurité.

    De deux execl("/bin/cp","cp","path","Dest",NULL); marche très bien tu as simplement oublié que execl() attend des chaines de caractères comme argument.

    Voilou

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 352
    Points : 42 823
    Points
    42 823
    Par défaut
    Déjà l'appel system() tu le bannit parce qu'il présente une importante faille de sécurité.
    Pourquoi ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  9. #9
    Membre éprouvé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2014
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 498
    Points : 1 178
    Points
    1 178
    Par défaut
    S il s agit d un programme setuid , et si un Shell script malsain de nom "cp" est situé avant "cp" dans le PATH, c est là la faille de sécurité .

    Systèm() peut être utilisé dans tout programme non setuid mais en règle général c est mieux d utiliser la famille des exec() sans recherche dans le PATH.

  10. #10
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 352
    Points : 42 823
    Points
    42 823
    Par défaut
    Si j'appele :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("/bin/cp", path , dest);
    le path ne sera utilisé que si /bin/cp n'existe pas non ? ce qui me parait peu probable (mais bien sur pas impossible).
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  11. #11
    Membre éprouvé
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2014
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 498
    Points : 1 178
    Points
    1 178
    Par défaut
    Je suppose que oui mais du coup regarde ce que le man system marque :

    Do not use system() from a program with set-user-ID or set-group-ID privileges, because strange values for some environment variables might be used to subvert system integrity. Use the exec(3) family of functions instead, but not execlp(3) or execvp(3). system() will not, in fact, work properly from programs with set-user-ID or set-group-ID privileges on systems on which /bin/sh is bash version 2, since bash 2 drops privileges on startup. (Debian uses a modified bash which does not do this when invoked as sh.)


    enfin de toute facon l'appel correct serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("/bin/cp path dest");

  12. #12
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 352
    Points : 42 823
    Points
    42 823
    Par défaut
    Do not use system() from a program with set-user-ID or set-group-ID privileges, because strange values for some environment variables might be used to subvert system integrity. Use the exec(3) family of functions instead, but not execlp(3) or execvp(3). system() will not, in fact, work properly from programs with set-user-ID or set-group-ID privileges on systems on which /bin/sh is bash version 2, since bash 2 drops privileges on startup. (Debian uses a modified bash which does not do this when invoked as sh.)
    Ok, c'est clair.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. [XL-2003] Plage de cellule de plusieurs onglet a copier avec liaison dans ongler recap
    Par toutletoutim dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2010, 08h46
  2. Copier un fichier dans un dossier sur le serveur avec PHP
    Par dotnet_kbma dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 31/01/2010, 22h27
  3. Réponses: 2
    Dernier message: 10/07/2008, 15h39
  4. Copier une table dans une autre avec toad
    Par ibtissamr dans le forum SQL
    Réponses: 3
    Dernier message: 04/06/2008, 12h25
  5. Copier contenu TB_A dans TB_B avec les même champs
    Par snoopy69 dans le forum Access
    Réponses: 3
    Dernier message: 13/10/2005, 17h22

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