-
Notifications
You must be signed in to change notification settings - Fork 16
/
repertoires.txt
127 lines (108 loc) · 7.05 KB
/
repertoires.txt
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
REPERTOIRES
HEADER ==> #<dirent.h>
DIR #Struct analogue à FILE, mais pour les répertoires.
#Elle contient la liste des fichiers du répertoires, et
#un dir position indicator positionné sur l'un des
#fichiers. Lors de la lecture de la référence à un
#fichier, ce dir position indicator avance vers la
#prochaine référence
#Les fichiers sont listés selon leur ordre dans le
#système de fichiers, non leur ordre alphabétique.
struct dirent #Structure désignant un fichier dans un répertoire, avec
#les champs suivants :
STKT_DIRENT_VAR.d_name #Basename du fichier sous forme de STR
STKT_DIRENT_VAR.d_fileno#Inode du fichier, sous forme d'INT_VAL
STKT_DIRENT_VAR.d_ino #Même chose, mais déprécié
STKT_DIRENT_VAR.d_type #Type du fichier, en fonction des macros ci-dessous
#Ce membre n'est pas toujours présent.
STKT_DIRENT_VAR.d_reclen#Nombre d'octets alloués au nom de fichier (en général
#supérieur à ce qu'il faut), sous forme d'UINT_VAL
#Ce membre n'est pas toujours présent.
STKT_DIRENT_VAR.d_off #
#Ce membre n'est pas toujours présent.
_DIRENT_HAVE_D_TYPE #Macro définie si STKT_DIRENT_VAR.d_type est disponible
#sur le système présent
_DIRENT_HAVE_D_RECLEN #Même chose pour d_reclen
_DIRENT_HAVE_D_OFF #Même chose pour d_off
DT_* FLAGS ==> #Ces macros désignent les valeurs retournées par
#STKT_DIRENT_VAR.d_type. La valeur de mon système est
#entre parenthèses :
DT_UNKNOWN #Type inconnu (0)
DT_DIR #Répertoire (4)
DT_REG #Fichier régulier (8)
DT_LNK #Symlink (10)
DT_FIFO #FIFO (1)
DT_CHR #Character special file (2)
DT_BLK #Block special file (6)
DT_SOCK #Socket (12)
IFTODT(ST_MODE_VAR) ----# Macro retournant la D_TYPE_VAR (struct dirent)
| correspondant à ST_MODE_VAR (struct stat)
DTTOIF(D_TYPE_VAR) ----# Inverse.
opendir(STR) #Ouvre le répertoire se trouvant au chemin STR
----| et le renvoie sous forme DIR_ADR, avec le dir position
| indicator au début de DIR, ou NULL si erreur
| (notamment s'il ne s'agit pas d'un répertoire)
fdopendir(INT_VAL) #Même chose, mais en utilisant le file descriptor
#(devant pointer un répertoire) INT_VAL plutôt qu'un
#chemin de fichier
closedir(DIR_ADR) #Ferme DIR et le file descriptor auquel il est associé.
----| Renvoie 0 si succès, -1 sinon
HEADER ==> #<dirent.h>
readdir(DIR_ADR) #Lit la prochaine entrée de DIR
----| et la renvoie sous forme de STKT_DIRENT_ADR, ou NULL
| si toutes les entrées ont déjà été lues, ou si erreur
HEADER ==> #<dirent.h>
MACROS A DEFINIR ==> #_BSD_SOURCE / _SVID_SOURCE
telldir(DIR_ADR) ----# Renvoie le dir position indicator de DIR, sous forme
| de LONG_INT, ou -1 si erreur
seekdir(DIR_ADR, #Place le dir position indicator de DIR à l'endroit
LONG_INT_VAL) #LONG_INT_VAL, ce dernier devant avoir été obtenu via
#telldir()
HEADER ==> #<dirent.h>
rewinddir(DIR_ADR) #Replace le dir position indicator de DIR au début
HEADER ==> #<dirent.h>
MACROS A DEFINIR ==> #_BSD_SOURCE / _SVID_SOURCE
scandir(STR, #Fait de STKT_DIRENT_ADR_ADR un pointeur renvoyant vers
STKT_DIRENT_ADR_ADR_ADR,#une array de STKT_DIRENT_ADR désignant par ordre
FONC_ADR, FONC2_ADR) #alphabétique les fichiers contenus dans le répertoire
#STR.
#FONC_ADR et FONC2_ADR sont automatiquement invoqués
#par scandir() avec les &(STKT_DIRENT_VAR) du répertoire
#STR en argument. En effet :
# - Le tri alphabétique est obtenu par la comparaison
# des fichiers les uns avec les autres via FONC2_VAR,
# qui doit être sous la forme :
# - int FONC_VAR(const struct dirent
# **STKT_DIRENT_ADR_ADR, const struct dirent
# **STKT_DIRENT_ADR_ADR)
# Et renvoyer les mêmes genres de valeurs que
# strcmp()
# alphasort() et versionsort() peuvent être de bonnes
# FONC2_ADR
# - Par ailleurs, ne seront ni triés, ni traités les
# fichiers (c'est-à-dire les STKT_DIRENT_VAR) qui,
# passés comme arguments à FONC_VAR, feront que
# FONC_VAR renvoie 0.
# FONC_VAR doit être sous la forme :
# - int FONC_VAR(const struct dirent
# *STKT_DIRENT_ADR)
# Et renvoyer 0 si STKT_DIRENT_VAR ne doit pas être
# trié. FONC_ADR peut être NULL pour que tous les
# fichiers soient traités.
#STKT_DIRENT_ADR_ADR_ADR doit être alloué dynamiquement,
#mais STKT_DIRENT_ADR_ADR et les STKT_DIRENT_ADR peuvent
#ne pas l'être car scandir() le fera.
----| Renvoie le nombre de répertoires triés, ou -1 si
| erreur
alphasort(ADR1, ADR2) #Equivaut à strcoll((*ADR1)->d_name, (*ADR2)->d_name)
#Les ADR doivent en fait être des STKT_DIRENT_ADR_ADR
HEADER ==> #<dirent.h>
MACROS A DEFINIR ==> #_BSD_SOURCE
versionsort(ADR1, ADR2) #Equivaut à strverscmp((*ADR1)->d_name, (*ADR2)->d_name)
#Les ADR doivent en fait être des STKT_DIRENT_ADR_ADR
HEADER ==> #<sys/types.h>
MACROS A DEFINIR ==> #_BSD_SOURCE
dirfd(DIR_ADR) ----# Renvoie le file descriptor de DIR_ADR sous forme
| d'INT_VAL, ou -1 si erreur