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 :

le programme my_cat


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Par défaut le programme my_cat
    Bonsoir à tous, j'ai un exercice à réaliser en programmation C sous linux Fedora et j'ai besoin de votre aide.

    Reprogrammer la commande Unix cat: cette commande affiche sur la sortie standard stdout le contenu du ou des fichiers passés en argument.

    Contraintes:
    - afin de diminuer les accès disque, la lecture sera effectuée par bloc de 512 octets.
    - utiliser uniquement les primitives d'entrée sortie. notamment ne pas utiliser les fonctions scanf ou printf. seul l'usage de la fonction perror est autorisé.

    Merci à vous d'avance

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Apparement, l'exercice veut que tu utilises les fonctions d'entrées/sorties de bas niveau de Linux pour écrire le programme c'est-à-dire la fonction open, read, write et close. Exemple :
    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
    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
     
    int main(int argc, char * argv[]) {
        /* Utilisation : my_cat fichier.ext */
        int fd = open(argv[1], 0, O_RDONLY);
        if (fd < 0)
            perror(argv[1]);
        else {
            char buf[512];
            int n;
            while ((n = read(fd, buf, sizeof(buf))) > 0)
                write(STDOUT_FILENO, buf, n);
            close(fd);
        }
        return 0;
    }
    Ce code n'a pas été testé mais devrait marcher. Il ne teste pas non plus si argc est bien égal à 2 avant de continuer l'exécution. En bref, y'a pas mal de trucs que tu peux encore améliorer.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    A-t-on droit à mmap64() ou est-ce considéré comme de l'arrogance ?

  4. #4
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    @Obsidian:
    mmap64(3) n'est pas une primitive.

    @Melem:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sloshy@clonix: gcc Melem.c 
    Melem.c: In function 'main':
    Melem.c:12: error: 'n' undeclared (first use in this function)
    Melem.c:12: error: (Each undeclared identifier is reported only once
    Melem.c:12: error: for each function it appears in.)
    en plus ton code est crade et surement pas facile a comprendre pour un novice en C

    @persiano:
    Essaye de lire les man de open, read, write, close ca devrais deja largement t'aider.
    Si tu ne comprend pas, pose des questions precises plutot que de chopper une source.

  5. #5
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    @sloshy : en effet j'ai oublié de déclarer n mais voilà j'ai corrigé (mais toujours pas testé ). Et le but du code n'était pas de faire tout comprendre d'un coup mais de fournir un exemple minimal d'utilisation des fonctions open, read, write et close. Avec les man pages seulement, pour un débutant, c'est pas toujours évident.

  6. #6
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    de toute facon, je pense pas qu'il reviendra

Discussions similaires

  1. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  2. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  3. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05
  4. Comment débuter en programmation ?
    Par Marc Lussac dans le forum Débuter
    Réponses: 0
    Dernier message: 08/04/2002, 11h29
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

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