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 :

Coder la commande cp


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut Coder la commande cp
    Bonjour tout le monde,
    je débute avec le c et là je me demande comment peut-on developper la commande cp en utilisant la syntaxe cp /tmp/f1 /home/f2 ??
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    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 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Bonjour,

    Il faut utiliser les arguments int argc et char ** argv de la fonction main(), qui te permettront d'accéder aux options passées en ligne de commande sous cette forme.

    Ensuite, il faut ouvrir les deux fichiers à la fois, lire le contenu du premier et l'écrire dans le second, puis refermer les fichiers.

  3. #3
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour
    J'ajouterais aussi, la gestion des répertoires.
    à bientôt
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    C'est encore flou

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    C'est encore flou
    En espérant que ceci t'éclaire
    http://c.developpez.com/faq/?page=Co...-environnement

  6. #6
    Membre du Club Avatar de Waether
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 44
    Points : 69
    Points
    69
    Par défaut
    Pour réaliser un programme imitant le fonctionnement de la commande cp tu vas avoir besoin des fonctons open, readet write c'est tout.
    Comme dit plus haut tu aura besoin de prendre en paramètre les chemins du premiers fichier et celui où tu veux l'envoyer.
    Par exemple si j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int main(int ac, char **argv)
    {
       if (ac == 3)
          printf("%s\n%s\n%s\n", av[0], av[1], av[2]);
       return (0);
    }
    Lorsque tu démarrera ton programme via le terminal il faudra lui placer comme ici des paramètres.

    # ./prog argument1 argument2 | cat -e
    prog$
    argument1$
    argument2$
    #
    Si tu as du mal avec les arguments placés en paramètre je te conseille d'essayer de maîtriser cela parfaitement avant de t'attaquer vraiment à cp =)
    Voilà si tu as d'autres questions n'hésites pas.
    Keep calm and debug ...

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    salut,
    c'est quoi donc la différence entre ce que tu viens de dire et ce code ? et comment puis-je l'améliorer ?

    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
    #include <stdio.h>
    #include <stdlib.h>
    #define fichier1 "/tmp/f1"
    #define fichier2 "/home/f2"
     
    int main(void)
    {
    FILE *f_in, *f_out;
    int c;
     
    if ((f_in = fopen(fichier1,"r")) == NULL)
    {
    fprintf(stderr, "\nErreur %s\n",fichier1);
    return(EXIT_FAILURE);
    }
    if ((f_out = fopen(fichier2,"w")) == NULL)
    {
    fprintf(stderr, "\nErreur %s\n", \
    fichier2);
    return(EXIT_FAILURE);
    }
    while ((c = fgetc(f_in)) != EOF)
    fputc(c, f_out);
    fclose(f_in);
    fclose(f_out);
    return(EXIT_SUCCESS);
    }

  8. #8
    Membre du Club Avatar de Waether
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 44
    Points : 69
    Points
    69
    Par défaut
    open renvoie un int quand fopen renvoie un FILE *.
    C'est juste que je suis habitué à utiliser open au lieu de fopen, et que dans le cas de cp tu n'as pas vraiment besoin de plus que ceci.

    Sinon ton main ne prend rien en paramètre, ce qui est génant dans le cas de la commande cp.
    C'est le seul problème qu'il te reste.
    Esired t'as mit un lien vers une FAQ ou la première question traite de ce dont tu as besoin^^
    Keep calm and debug ...

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2015
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    donc ça donne ça à la fin ??

    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
    39
    40
    41
    42
    43
     
    #include <stdio.h>
    #include <stdlib.h>
    #define fichier1 "/tmp/f1"
    #define fichier2 "/home/f2"
     
    int main( int argc, char *argv[] ) {
    int i;
     
    printf( "argc: %d\n", argc );
    printf( "argv[0]: %s\n", argv[0] );
     
    if ( argc == 1 ) {
    printf( "No arguments were passed.\n" );
    } else {
    printf( "Arguments:\n" );
     
    for ( i = 1; i < argc; ++i ) {
    printf( " %d. %s\n", i, argv[i] );
    }
    }
     
    FILE *f_in, *f_out;
    int c;
     
     
    if ((f_in = fopen(fichier1,"r")) == NULL)
    {
    fprintf(stderr, "\nErreur %s\n",fichier1);
    return(EXIT_FAILURE);
    }
    if ((f_out = fopen(fichier2,"w")) == NULL)
    {
    fprintf(stderr, "\nErreur %s\n", \
    fichier2);
    return(EXIT_FAILURE);
    }
    while ((c = fgetc(f_in)) != EOF)
    fputc(c, f_out);
    fclose(f_in);
    fclose(f_out);
    return(EXIT_SUCCESS);
    }

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Ton code a l'air d'être correct mais il faudrait retirer "\" au niveau de la ligne 34 de ton code

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mer19 Voir le message
    donc ça donne ça à la fin ??

    Code c : 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
    39
    40
    41
    42
    #include <stdio.h>
    #include <stdlib.h>
    #define fichier1 "/tmp/f1"
    #define fichier2 "/home/f2"
     
    int main( int argc, char *argv[] ) {
    int i;
     
    printf( "argc: %d\n", argc );
    printf( "argv[0]: %s\n", argv[0] );
     
    if ( argc == 1 ) {
    printf( "No arguments were passed.\n" );
    } else {
    printf( "Arguments:\n" );
     
    for ( i = 1; i < argc; ++i ) {
    printf( " %d. %s\n", i, argv[i] );
    }
    }
     
    FILE *f_in, *f_out;
    int c;
     
     
    if ((f_in = fopen(fichier1,"r")) == NULL)
    {
    fprintf(stderr, "\nErreur %s\n",fichier1);
    return(EXIT_FAILURE);
    }
    if ((f_out = fopen(fichier2,"w")) == NULL)
    {
    fprintf(stderr, "\nErreur %s\n", \
    fichier2);
    return(EXIT_FAILURE);
    }
    while ((c = fgetc(f_in)) != EOF)
    fputc(c, f_out);
    fclose(f_in);
    fclose(f_out);
    return(EXIT_SUCCESS);
    }
    Bonjour

    Si tu indentais un peu mieux ton code (rectification: si tu l'indentais tout simplement) !!! Et il ne faut pas s'appuyer sur exit() pour qu'il fasse les choses à ta place et penser à fermer f_in si f_out ne s'ouvre pas. Et à quoi ça sert d'avoir intégré argc et argv si tu continues à travailler sur /tmp/f1 et /home/f2 (en plus travailler en tant que root !!!!!!!!!! mais ça c'est un autre problème)

    Ensuite copier un fichier caractère par caractère c'est pas super optimisé. Tu peux utiliser fread() et fwrite() qui travaillent avec des tampons de caractères. Tu définis un tampon de taille n, tu demandes un fread() de n octets que tu stockes dans le tampon. Cette lecture te renvoie le nombre m d'octets réellement lus (parce que sur la fin du fichier, tu n'es pas obligé de recevoir le nombre d'octets demandés) et tu demandes alors un fwrite() des m octets pris à partir du tampon.
    Et tu t'arrêtes quand fread() renvoie une valeur <= 0 (0 = fin normale, -1 = erreur de lecture).

    Citation Envoyé par mer19 Voir le message
    je débute avec le c
    Et tu n'as même pas vu qu'il y a une section "débutant" dans ce forum ???

    Citation Envoyé par Waether Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main(int ac, char **argv)
    {
       if (ac == 3)
          printf("%s\n%s\n%s\n", av[0], av[1], av[2]);
       return (0);
    }
    av n'est pas défini...

    Citation Envoyé par Waether Voir le message
    Lorsque tu démarrera ton programme via le terminal il faudra lui placer comme ici des paramètres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ./prog argument1 argument2 | cat -e
    prog$
    argument1$
    argument2$
    #
    Pourquoi piper le programme vers un cat ? Et comment fera celui qui travaille sous Windows ? Ici c'est un forum C, pas Unix...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [PrestaShop] Comment Coder ou créer module de recherche de référence dans Commande afficher format Excel
    Par PatrickConsultant dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 04/05/2015, 12h19
  2. [AC-2007] Comment coder les boutons de commandes sous acces 2007
    Par njcom dans le forum VBA Access
    Réponses: 1
    Dernier message: 06/07/2009, 17h37
  3. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  4. Réponses: 3
    Dernier message: 02/09/2002, 18h49
  5. Réponses: 2
    Dernier message: 11/08/2002, 21h27

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