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 :

Aide commande cat c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Par défaut Aide commande cat c++
    Salut à tous!!
    J'ai réalisé la commande cat en c et je désire la transcrire en c++ mais hélas je débute en c++ et mes bases ne sont pas assez stables et j'aimerai avoir quelques idées..voici le code en c

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
     
     
     
     #include <stdlib.h>
     #include <unistd.h>
     #include <fcntl.h>
     
     void my_putchar(char c)
     {
     write(1, &c, 1);
     }
     
     
     void my_putstr(char *str)
     {
     for (; *str != 0; str++)
     my_putchar(*str);
     }
     
     void cat(char *fn)
     {
     int nb;
     int fd;
     char *buffer;
     
     fd = open(fn, O_RDONLY);
     buffer = (char *) malloc(sizeof(char) * 512);
     while ((nb = read(fd, buffer, 512)) > 0)
     write(1, buffer, nb);
     if (nb == (-1))
     {
     my_putstr("cat: ");
     my_putstr(fn);
     my_putstr(": Operation not permitted\n");
     }
     close(fd);
     }
     
     void cat_alone()
     {
     char buffer[512];
     int nb;
     
     while ((nb = read(0, buffer, 512)) > 0)
     write (1, buffer, nb);
     }
     
     int main(int ac, char **argv)
     {
     if (ac < 2)
     cat_alone();
     else
     {
     ac--;
     argv++;
     while (ac-- > 0)
     if (*argv[0] == '-')
     cat_alone();
     else
     cat(*argv++);
     
     
      system("PAUSE");	
      return 0;
    }

  2. #2
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Bonjour,
    Je sais que tu n'es pas là pour ça, mais je ne peux m'empêcher de faire des commentaires sur ton code…
    Je ne dirai rien sur l'utilité de redéfinir un « putchar » et un « putstr »… mais je n'en pense pas moins.
    Et je suppose que ton besoin de réécrire une commande « cat » vient du fait qu'elle n'existe pas sous Windows.

    Pour commencer, si tu pouvais indenter ton code, ça le rendrait beaucoup plus lisible et facile à analyser.


    Des macro ont été définies pour identifier le descripteur de fichier des entrées/sorties standards.
    Je ne te fais pas l'affront de te préciser à laquelle correspond chacune…
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <unistd.h>
     
    STDIN_FILENO
    STDOUT_FILENO
    STDERR_FILENO

    Dans « cat() » :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buffer = (char *) malloc(sizeof(char) * 512);
    • « À tout malloc doit correspondre un free »
    • Pourquoi une allocation dynamique alors que tu connais la taille à la compilation ? Dans la fonction « cat_alone() », tu fais ça mieux…
    • C'est juste un détail, mais la macro « BUFSIZ » (en-tête « stdio.h ») semble toute désignée pour spécifier la taille d'un buffer. Mais c'est vrai que ce n'est pas une obligation…



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int ac, char **argv)
    Par convention, on nomme la variable qui contient le nombre de paramètres : « argc ».
    Mais encore une fois, ce n'est qu'un détail.

    [edit]
    Les macros « STD*_FILENO » ne se situent pas dans le fichier d'en-tête « stdio.h ».
    Mea culpa…
    [/edit]

  3. #3
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Si tu n'as pas de question particulière, ce n'est pas évident de t'aider.
    Tu peux commencer par jeter un œil à la F.A.Q., si ce n'est pas déjà fait.

    Pour le cas présent, si tu te tournes vers les « std::streambuf » (et « std::filebuf »), ton code ne devrait pas trop changer.
    www.cplusplus.com
    www.cppreference.com
    À noter, pour les flux, la fonction membre « rdbuf() » qui retourne un pointeur sur le buffer utilisé.

    Un autre site à connaître, pour la STL (Standard Template Library) uniquement : http://www.sgi.com/tech/stl/

    Si tu as d'autres questions, n'hésite pas.

Discussions similaires

  1. problème avec la commande CAT
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/07/2007, 15h21
  2. Aide commande find exclure repertoire
    Par isa150183 dans le forum Administration système
    Réponses: 4
    Dernier message: 12/05/2007, 23h51
  3. Aide commande DATE
    Par cstan dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 28/03/2007, 12h56
  4. programme c qui émule la commande cat
    Par momoh dans le forum C
    Réponses: 6
    Dernier message: 07/12/2006, 11h15
  5. Problème de commande cat
    Par peppena dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 12/04/2006, 12h42

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