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 :

copier un fichier sous linux


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    Points : 38
    Points
    38
    Par défaut copier un fichier sous linux
    bonjour à tous,
    voici mon code en c, supposé copier un fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <cstdlib>
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
     
    int copier_fichier(char const * const source, char const * const destination)
    {
        FILE* fSrc;
        FILE* fDest;
        char buffer[512];
        int NbLus;
     
        if ((fSrc = fopen(source, "rb")) == NULL)
        {
            return 1;
        }
     
        if ((fDest = fopen(destination, "wb")) == NULL)
        {
            fclose(fSrc);
            return 2;
        }
     
        while ((NbLus = fread(buffer, 1, 512, fSrc)) != 0)
            fwrite(buffer, 1, NbLus, fDest);
     
        fclose(fDest);
        fclose(fSrc);
     
        return 0;
    }
     
    int main()
    {
        copier_fichier("bidule", "copy/bidule");
     
        return EXIT_SUCCESS;
    }
    lorsque je le lance sous linux, ce script me renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bash: ./main: Permission non accordée
    le dossier copy existe déja, est il créé si ce n'est pas le cas?
    et pourquoi linux (même en root) ne veut il pas copier mon fichier?

    merci à vous

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour

    je n'ai même pas regardé ton code parce que l'erreur remontée ne vient pas de là (ça ne veut pas dire qu'il n'y a pas d'erreur dans ton code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bash: ./main: Permission non accordée
    signifie que tu ne peux pas exécuter le fichier "main" du répertoire courant, c'est tout

    La preuve en quelques lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    plx@sony:~$ > main
    plx@sony:~$ ls -l main
    -rw-rw-r-- 1 plx plx 0 sept. 22 12:32 main
    plx@sony:~$ ./main
    bash: ./main: Permission non accordée
    plx@sony:~$
    complément : c'est parce que ton programme ne prend aucun argument (j'ai donc conclu que ton "exécutable" - qui ne l'est pas OU qui n'est pas lisible) - se nommait "main") que j'ai donné l'explication ci-dessus.

    Si c'était un problème avec le répertoire "/copy" ou le fichier destination "/copy/bidule", tu aurais d'autres messages, qui reprendraient le nom du/des fichiers posant problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    plx@sony:~$ > /copy/bidule
    bash: /copy/bidule: Aucun fichier ou dossier de ce type
    plx@sony:~$ 
    plx@sony:~$ sudo mkdir /copy
    [sudo] password for plx: 
    plx@sony:~$ 
    plx@sony:~$ > /copy/bidule
    bash: /copy/bidule: Permission non accordée
    plx@sony:~$
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    mais comment ce fait il que même en root je ne puisse l'executer (j'ai fais un chmod +r au préalable)

  4. #4
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    root peut exécuter n'importe quel ... exécutable. Si un fichier n'est pas exécutable (x, pas r), être root n'y change rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    plx@sony:~$ > main
    plx@sony:~$ ls -l main
    -rw-rw-r-- 1 plx plx 0 sept. 22 12:58 main
    plx@sony:~$ sudo ./main
    sudo: ./main: command not found
    plx@sony:~$
    Tiens, j'ai un autre message d'erreur (je pense que le message que tu as posté ne correspond pas à une exécution sous l'identité root)

    C'est un chmod+x qu'il faut faire pour rendre un fichier exécutable (dans la mesure où cela a un sens)

    D'ailleurs, comme ton fichier "main" est, à priori, le résultat d'une compilation + link d'un source C (et pas un script), tu ne devrais même pas avoir à faire de chmod.
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    oui, je m'étais trompé de lettre, mais un chmod +x donne le même résultat
    permission non accordée.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    peux-tu montrer ta ligne de commande de compilation?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    ainsi que le résultat de "ls -l main"
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    code bloc s'occupe de compiler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -rw-r--r-- 1 panda panda 23964 2012-09-22 12:23 main

  9. #9
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bizarre ton truc.

    Déjà, j'ai repensé à ton message d'erreur du post#1 : ton problème n'est pas lié au contenu de ton code C ou à des problèmes de droits de /copy : c'est bien le bash qui couine quand tu tentes d'exécuter "main" (./main pour être précis) : début du message d'erreur en "bash: ..."

    De plus, sous Unix/Linux, quand la compilation et l'édition de liens aboutissent, le fichier exécutable créé a les droits d'exécution (x) positionnés pour tout le monde (user, group et others). Code::Blocks, en utilisant le compilateur gcc, fait de même (j'ai testé rapidement).

    Donc, pourquoi ton fichier main n'est-il pas exécutable ? cherche de ce côté !


    ps : au point où on en est, le "main" que tu tentes de lancer est-il bien le résultat du "build" sous Code::Blocks ? Est-ce que un "file main" te renvoye bien un type de fichier exécutable du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    plx@sony:~/maindir/main/bin/Debug$ file main
    main: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xe63b7203681dc0444cb54bf0819b0ac3ef223626, not stripped
    plx@sony:~/maindir/main/bin/Debug$
    accessoirement, même si ça ne joue pas, #include <cstdlib> et #include <iostream>, c'est du C++
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 631
    Points
    23 631
    Par défaut
    Hello,

    Il n'est pas impossible que sa partition « /home » soit montée de façon à interdire les exécutables et/ou que son umask soit mal positionné.

    @dergeekpanda : que donne l'exécution de la commande suivante ?

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    $ umask ; mount | grep home

    et parviens-tu à exécuter ton programme lorsque tu le compiles à la main avec ceci ?


  11. #11
    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
    Je me demande s'il n'a pas nommé son fichier .C main et tente de l'exécuter comme si c'était un programme dans un langage avec un interpréteur... Je sais, c'est possible avec Tiny CC.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  12. #12
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 631
    Points
    23 631
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Je me demande s'il n'a pas nommé son fichier .C main et tente de l'exécuter comme si c'était un programme dans un langage avec un interpréteur... Je sais, c'est possible avec Tiny CC.
    Possible, c'est pour cela qu'on attend le résultat de la commande file, mais après un chmod +x, il devrait quand même avoir obtenu un message d'erreur quelque peu différent.

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -rw-r--r-- 1 panda panda 23964 2012-09-22 12:23 main
    si cette ligne correspond à l'exécutable de ton programme alors il n'a pas les droits d'exécution.
    une réponse vous a permis d'avancer ?

  14. #14
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 631
    Points
    23 631
    Par défaut
    Euh... Question bête, mais rassure-moi : tu as bien écrit


    et pas simplement


    n'est-ce pas ?

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    un chmod +x main et un chmod 777 main ne changent pas les droit d'execution
    ?_?

  16. #16
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 631
    Points
    23 631
    Par défaut
    Citation Envoyé par dergeekpanda Voir le message
    un chmod +x main et un chmod 777 main ne changent pas les droit d'execution
    ?_?
    Ça nous ferait plaisir - et nous aiderait beaucoup - si tu apportais des réponses précises aux questions que l'on te pose dans ces commentaires :

    Commentaire N° 9 ;
    Commentaire N° 10 ;
    Commentaire N° 11 ;
    Commentaire N° 14 ;

  17. #17
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Citation Envoyé par dergeekpanda Voir le message
    un chmod +x main et un chmod 777 main ne changent pas les droit d'execution
    ?_?
    si ton programme compilé n'a pas cette "etat" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -rwxr--r-- 1 panda panda 23964 2012-09-22 12:23 main
    et que tu ne l'exécute pas avec l'utilisateur panda ou un utilisateur appartenant au groupe panda ou avec root alors tu aura une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bash: ./main: Permission non accordée
    .
    une réponse vous a permis d'avancer ?

  18. #18
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 631
    Points
    23 631
    Par défaut
    Citation Envoyé par Exia93 Voir le message
    si ton programme compilé n'a pas cette "etat" : [...] et que tu ne l'exécute pas avec l'utilisateur panda ou un utilisateur appartenant au groupe panda ou avec root alors tu aura une erreur
    C'est ce que l'on dit depuis le début et il a déjà essayé de l'exécuter en root. Tes contributions sont les bienvenues mais à condition de relire le fil en entier au préalable.

  19. #19
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    C'est ce que l'on dit depuis le début et il a déjà essayé de l'exécuter en root. Tes contributions sont les bienvenues mais à condition de relire le fil en entier au préalable.
    J'ai relu le fil en entier mais ce qui m'a interpelé c'est la réponse qu'il a fait à la question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ainsi que le résultat de "ls -l main"
    de plxpy, sa réponse a été :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -rw-r--r-- 1 panda panda 23964 2012-09-22 12:23 main
    cette réponse a été donnée alors que plxpy lui avait expliqué tous les problèmes de droits, c'est pour ça que je lui est dit de vérifier que son fichier binaire main qui représente sont programme compilé est bien le droit d'exécution qui en voyant sa réponse n'est pas le cas.

    Pour le test en étant root si le fichier n'a pas le droit d'exécution ça reviens au même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # ls -l programme
    -rw-r--r-- 1 user users 11880 Aug 15 00:04 programme
    et si l'on tente de l'exécuter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # ./programme
    -bash: ./programme: Permission denied
    et si on rajoute le droit x :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chmod +x programme
    -rwxr-xr-x 1 user users 11880 Aug 15 00:04 programme
    et que qu'on l'exécute, il se lance normalement.
    une réponse vous a permis d'avancer ?

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ file main
    main: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ umask ; mount | grep home
    0002
    gvfs-fuse-daemon on /home/panda/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=panda)
    ne renvoie rien et crée l’exécutable main

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Spécifier type de système de fichiers sous linux
    Par rond24 dans le forum Administration système
    Réponses: 4
    Dernier message: 07/03/2006, 20h09
  2. Téléchargement de fichier sous Linux
    Par patrick_lassaly dans le forum Administration système
    Réponses: 1
    Dernier message: 03/01/2006, 11h31
  3. fichier sous linux
    Par razord dans le forum C
    Réponses: 2
    Dernier message: 19/09/2005, 11h54
  4. Exclusivité sur un fichier sous linux
    Par ggnore dans le forum Administration système
    Réponses: 4
    Dernier message: 03/11/2004, 09h46
  5. Les fichiers sous linux/windows
    Par Stessy dans le forum Linux
    Réponses: 5
    Dernier message: 05/12/2003, 09h30

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