Bonsoir , je ne comprend pas un programme (j'ai mis en rouge tout ce que je n'arrive pas a comprendre )si quelqu'un pourrait m'aider a comprendre s'il vous plait merci d'avance:
Ce programme consiste a rejeter les n dernières lignes d'un fichier
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
67
68
69 #include <stdio.h>/* printf */ #include <stdlib.h> #include <string.h>/* strlen, strcpy */ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>/* open */ #include <unistd.h>/* read */ typedef struct{ char ** tch; int taille; int tete; /* ptr de tete */ int queue; /* ptr de queue */ } fifo_ch; /* fifo de chaînes */ fifo_ch* fifo_ch_creer(unsigned int taille){ if ( < 1) /* au moins une case */ return tailleNULL; fifo_ch* r=malloc(sizeof(fifo_ch)); r->taille=taille+1; /* tjrs une case vide entre queue et tete */ r->tch=malloc(r->taille*sizeof(char*)); r->tete=r->queue=0; /* fifo vide */ return r; } // fifo_ch * fifo_ch_ajouter(fifo_ch *f, char* s){ char* new=malloc(strlen(s)+1); strcpy(new,s); /* copie dynamique de s */ if((f->queue)%f->taille==f->tete){ /* fifo pleine */ free(f->tch[f->tete]); /* désallouer la chaîne en tête */ f->tete=(f->tete+1)%f->taille; /* avancer la tete */ } f->tch[f->queue]=new; f->queue=(f->queue+1)%f->taille; /* avancer la queue sur case vide */ return f; } void fifo_ch_afficher(fifo_ch *f){ for(int i=f->tete;i!=f->queue;i=(i+1)%f->taille){ printf("%s",f->tch[i]); } } int main(int argc, char *argv[], char *env[]) { if(argc!=3){ printf("Syntaxe incorrecte : %s -8 fichier\n",argv[0]); return 1; } FILE *f=fopen(argv[2], "r"); if (f==NULL){ printf("Impossible d’ouvrir le fichier : %s \n",argv[2]); return 2; } int nb=atoi(argv[1]+1); /* +1 pour éviter le - */ if(nb<1){ printf("Impossible d’afficher %d lignes !\n",nb); return 3; } fifo_ch* fifo=fifo_ch_creer(nb); #define TAILLE 2048 char ligne[TAILLE]; /* espérons que cela suffise ! */ while(fgets(ligne,TAILLE,f)!=NULL){ fifo_ch_ajouter(fifo,ligne); } fifo_ch_afficher(fifo); fclose(f); }
Partager