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 :

programme c qui émule la commande cat


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 158
    Points : 56
    Points
    56
    Par défaut programme c qui émule la commande cat (amélioration)
    bonsoir tout le monde j'ai revu mon pragramme.
    Quand je le compile tout ce passe très bien pas d'erreur mais je lexécute rien qui se passe: je fais ./a.out nom d'un fichier pour voir son contenu [touche enter] puis plus rien. Je suis obliger de faire ctrl-c pour arrêter,je comprend pas très bien.


    pourtant l'algo est très simple:
    pour tous les paramètres de la ligne de commande
    open fichier
    tant que pas fini{
    read un certain nombre de bytes dans le fichier
    write à l'écran les bytes lus
    }
    close fichier.
    voici le code changer:
    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
     
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    int main (int argc, char*argv[])
    {
    int i;
    int byte_lu;
    int d;
    char tampon [1024];
    int fd;
    for (i=0; i<argc; i++)
    {
    d= open(argv[i],O_RDONLY);
    if(d==-1)
    {
    printf("these file does not exist check the name\n");
    exit(1);
    }
     
    else
    byte_lu=read(d,tampon,1024);
    while(byte_lu >0){
    fd= write(d,tampon,1024);
    } printf("%s",tampon[i]);
    }
    close (d);
    }
    quelqu'un à t-il une idée
    Bien à vous.

  2. #2
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(byte_lu >0){
    fd= write(d,tampon,1024);
    }
    mais une fois que tu rentre dans la boucle, byte_lu n'est plus jamais modifié, il est donc TOUJOURS superieur a 0 et donc tu ne sort jamais de la boucle !

  3. #3
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Bonjour,

    • On n'utilise pas open/read/write, mais fopen, fread, et fwrite.
    • Si tu veux lire dans le fichier et afficher à l'écran, à quoi sert le write ?
    • Concernant le printf, pourquoi le mettre après la boucle while, et pourquoi n'afficher qu'un seul caractère ? En plus, le caractère correspond à l'indice du paramètre en ligne de commande ???
    • Généralement, le premier (indice #0) de argv contient le nom de l'exécutable. Je ne pense pas que tu veuilles vraiment l'afficher à l'écran ?


    J'ai encore beaucoup d'autres idées, mais prend déjà en compte celles que nous t'avons indiquées...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Pour émuler la commande cat, il vaudrait mieux utiliser les entrées/sorties texte: fgetc(), fgets()...

  5. #5
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Citation Envoyé par zooro
    On n'utilise pas open/read/write, mais fopen, fread, et fwrite.
    Pas forcement, si il a envie d'utiliser l'ecriture bas niveau et non bufferisée .. (mais attention à faire un fflush(stdout) avant d'utiliser write() sur la sortie standard)

    Pour émuler la commande cat, il vaudrait mieux utiliser les entrées/sorties texte: fgetc(), fgets()...
    Bof, la lecture / ecriture par bloc avec fread/fwrite est tout aussi bien. C'est un tout chti peu plus rapide que lire/ecrire caractere par caractere

  6. #6
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Gruik
    Pas forcement, si il a envie d'utiliser l'ecriture bas niveau et non bufferisée .. (mais attention à faire un fflush(stdout) avant d'utiliser write() sur la sortie standard)


    Bof, la lecture / ecriture par bloc avec fread/fwrite est tout aussi bien. C'est un tout chti peu plus rapide que lire/ecrire caractere par caractere
    Je doute qu'il ait pensé à ces subtilités

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 158
    Points : 56
    Points
    56
    Par défaut programme c qui émule la commande cat
    Je tenais à vous remercier tous pour l'aide que vous m'avez apporté car j'ai finalement trouvé la solution.
    Bien à vous.
    momoh

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/10/2009, 09h29
  2. Réponses: 8
    Dernier message: 17/12/2008, 11h10
  3. Creer des fonctions qui émule des fonctions Access
    Par steelidol dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/05/2006, 18h42
  4. Problème de commande cat
    Par peppena dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 12/04/2006, 12h42
  5. [LG]un programme pascal qui traduit des chiffes en lettres
    Par hartmann n'goran dans le forum Langage
    Réponses: 6
    Dernier message: 26/04/2004, 18h23

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