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

Linux Discussion :

Lire un fichier à partir de la fin


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 51
    Points
    51
    Par défaut Lire un fichier à partir de la fin
    Bonjour je suis novice en C et j'ai un TP qui me demande de lire les fichiers passés en paramètre. La restriction est de les lire à partir de la fin jusqu'au début. Voici le code que j'ai fait, je sais juste pas comment partir de la fin vers le début. Merci de votre aide.

    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 <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
     
    main(int argc, char *argv[])
    {
        int srce, n, size;
        char tampon[512];
     
        for(int i=1; i< argc; i++)
        {
            //Ouverture du fichier
            if ((srce = open(argv[i], 0, 0777)) < 0)
            {
                printf("Le fichier %s n'existe pas\n\n", argv[i]);
            }                                          
            else
            {
            //Positionnement a la fin du fichier
                lseek(srce,0,SEEK_CUR);
            //Lecture du fichier de la fin au début en affichant son contenu
                while ((n = read(srce, tampon, 512)) > 0)
            printf("%s\n");
            //Fermeture du fichier
                close(srce);
            }
        }
        return 0;
     }

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    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 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    C'est plus un topic C que Linux.
    Voici l'algo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    initialiser une variable "i" à 0
    tant que "i" < taille fichier FAIRE
        se positionner sur l'octet "I" pris à partir de la fin (SEEK_END)
        lire un caractère
        incrémenter i
    fin FAIRE
    Ou alors t'initialises "i" directement à taille_fichier, tu te places sur l'octet "i" pris à partir du début (SEEK_SET) et tu décrémentes

    Ou alors tu te places directement sur la fin "lseek(fichier, 0, SEEK_END)" et tant que tu peux lire, tu fais un déplacement de 1 vers le début => "lseek(fichier, -1, SEEK_CUR)"

    PS: SEEK_CUR signifie "se déplacer de n positions par rapport à la position courante". Si tu fais un "lseek(fichier, 0, SEEK_CUR)" ben tu ne bouges pas !!!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 59
    Points : 51
    Points
    51
    Par défaut
    Est-ce que ce code aurait de l'allure ?

    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
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
     
    main(int argc, char *argv[])
    {
        int srce, n, i;
        long size;
        char tampon[512];
     
        for(int i=1; i< argc; i++)
        {
            //Ouverture du fichier
            if ((srce = open(argv[i], 0, 0777)) < 0)
            {
                printf("Le fichier %s n'existe pas\n\n", argv[i]);
            }                                          
            else
            {
                      i = 0;
                      fseek(srce, 0, SEEK_END);          /* aller en fin */
                      size = ftell(srce);                      /* lire la taille */
     
                     //Lecture du fichier de la fin au début en affichant son contenu
                     while (i < size)
                     {
                          if(n = read(srce, tampon, 512)) > 0)
                               printf("%s\n");
     
                          lseek(fichier, -1, SEEK_CUR)"
                     }
     
                    //Fermeture du fichier
                    close(srce);
            }
        }
        return 0;
     }

    Merci pour ton aide

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    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 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jimmplan Voir le message
    Est-ce que ce code aurait de l'allure ?

    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
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
     
    main(int argc, char *argv[])
    {
        int srce, n, i;
        long size;
        char tampon[512];
     
        for(int i=1; i< argc; i++)
        {
            //Ouverture du fichier
            if ((srce = open(argv[i], 0, 0777)) < 0)
            {
                printf("Le fichier %s n'existe pas\n\n", argv[i]);
            }                                          
            else
            {
                      i = 0;
                      fseek(srce, 0, SEEK_END);          /* aller en fin */
                      size = ftell(srce);                      /* lire la taille */
     
                     //Lecture du fichier de la fin au début en affichant son contenu
                     while (i < size)
                     {
                          if(n = read(srce, tampon, 512)) > 0)
                               printf("%s\n");
     
                          lseek(fichier, -1, SEEK_CUR)"
                     }
     
                    //Fermeture du fichier
                    close(srce);
            }
        }
        return 0;
     }

    Merci pour ton aide
    Ouais, ça ressemble assez bien à l'idée. Peut-être éviter d'utiliser la même variable "i" dans deux contextes imbriqués, peut-être encore faire varier la variable de la boucle while et enfin éviter d'appeler printf("%s") sans paramètre histoire de ressembler vraiment à un pro et là ce sera bon.

    D'ailleurs je me demande bien quelle chaine peux-tu afficher avec printf ? tampon ? ce n'est pas une chaine donc t'as pas le droit !!!

Discussions similaires

  1. Lire un fichier à partir de la fin
    Par wissem.ba dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 02/05/2011, 11h10
  2. Lire un fichier à partir d'une certaine position
    Par GreatDeveloperOnizuka dans le forum C#
    Réponses: 1
    Dernier message: 16/06/2009, 17h48
  3. Lire un fichier à partir des sources Includes
    Par Marley_T dans le forum C
    Réponses: 1
    Dernier message: 09/07/2008, 02h13
  4. (VWP) lire un fichier à partir de IE sur un serveur unix
    Par diamonds dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 07/02/2007, 21h54
  5. [Servlet][EJB]lire un fichier à partir de mon bean
    Par kimausoleil dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/02/2004, 15h26

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