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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    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 Expert 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 : 60
    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
    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:~$

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    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 Expert 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 : 60
    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
    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.

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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.

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

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