Pour mener à bien les tâches nécessaires
dans notre programme, j'utilise
plusieurs API (appels de fonction) IFS.
La figure 1 montre le programme RPG
exemple. En A, l'option compile Bnd-
Dir('QC2LE') fournit le répertoire de
lien pour les API IFS.
En B, je copie les prototypes de
procédures, les structures
Parcourons le programme

de données
et les variables globales utilisés pour
les API IFS. La figure 2 montre le
membre de code source pour la copie.
J’aime bien avoir des procédures
pour tout, y compris la procédure
principale, qui est le nom du programme.
La procédure en C de la figure
1 reçoit un paramètre – action –
qui dit au programme ce qu’il doit
faire. En passant un paramètre d’action,
nous avons un programme qui effectue
toutes les tâches IFS nécessaires.
Le programme peut être placé
dans le planificateur de jobs pendant la
nuit pour enlever le fichier IFS en lui
passant un ‘R’ comme paramètre.
La section déclaration en D est très
brève (j’expliquerai l’utilisation des variables
au fur et à mesure). Les deux
constantes sont IFS_IN et IFS_OUT. Ce
sont les noms des fichiers sur l’IFS
pour l’entrée et la sortie, complets
avec les extensions de chemin et de fichier.
Si action est ‘R’ (en E), le programme
doit supprimer le fichier de
sortie sur l’IFS puis quitter. Vous pouvez
supprimer un fichier sur l’IFS avec
la fonction fremove (remove file).
Fremove demande comme paramètre
un nom de fichier IFS entièrement
qualifié. La fonction renvoie un 0 (SUCCESS)
si le fichier est correctement
supprimé.
Ensuite, en F, j’utilise la fonction
lstat (obtenir l’information de fichier
ou de lien) pour voir si le fichier existe
et si le fichier d’entrée correspond à la date d’aujourd’hui et qu’il ne s’agit
pas d’un fichier restant de la veille.
Bien que cette étape ne soit pas obligatoire,
je la montre ici pour illustrer
comment utiliser la fonction Istat
pour vérifier l’existence d’un fichier
sur l’IFS et en tirer des informations
intéressantes.
Lstat prend deux arguments, le
nom du fichier et un pointeur vers
une structure de données. La fonction
IStat renvoie 0 (SUCCESS) si le fichier
est trouvé et, s’il est trouvé, remplit la
structure de données, Buf, avec de
l’information à propos du fichier. Je
n’utilise qu’une valeur provenant de
la structure de données, st_ctime, qui
est la date et l’heure de modification
du fichier.
J’utilise la fonction localtime pour
convertir le format de date et d’heure
interne en un format utilisable et pour
remplir la structure de données Tm.
Notons au passage que le mois commence
par 0. Par conséquent, vous
devez ajouter 1 au mois pour effectuer
une comparaison avec les
variables de type mois.
A présent, nous pouvons ouvrir le
fichier avec la fonction fopen (open
file) (en G). Contrairement à la manière
dont nous mettons des fichiers
dans les cartes F dans le système de fichiers
natif, nous devons ouvrir implicitement
les fichiers IFS dans le code.
La fonction fopen prend deux arguments:
1) le nom de chemin complet
vers le fichier sur l’IFS et 2) comment
le fichier sera utilisé. La figure 3
montre les différentes manières d’ouvrir
les fichiers texte. Pour notre projet,
le premier fichier est ouvert en
lecture seule. Le second est ouvert en
mode append, de manière que l’information
soit écrite à la fin du fichier. En
mode append, si le fichier n’existe
pas, il est créé. Le deuxième argument
utilise aussi le texte codepage comme
partie de la chaîne, afin que le programme
connaisse le codepage à utiliser
lors de l’écriture dans le fichier. La
fonction fopen renvoie un pointeur
vers le fichier, à utiliser dans les opérations de fichier ultérieures. Le
pointeur de renvoi est NULL (rien) s’il
ne peut pas ouvrir le fichier.
La section de code suivante (en H)
lit dans le fichier d’entrée et écrit en
mode append dans le fichier de sortie.
J’utilise la fonction fgets (get string)
pour lire une ligne de texte du fichier
de sortie. Une telle ligne de texte provenant
d’un fichier texte inclut tout
jusqu’à la fin du caractère ligne, X’25’.
La fonction fgets prend trois paramètres
: un pointeur vers la chaîne recevant
le résultat de la lecture, la longueur
maximale à lire, et le pointeur
vers le fichier d’entrée. Quand il n’y a
plus rien à lire, la fonction fgets renvoi
NULL.
Dans la boucle de lecture, la fonction
fputs (put string) écrit dans le fichier
de sortie. Je veux ajouter l’information
au fichier existant. Comme
j’utiliserai le fichier de sortie dans une
application PC comme un fichier texte,
je veux tronquer chaque ligne avec le
caractère fin de ligne EOL (X’25’). Le
deuxième paramètre est le pointeur
vers le fichier de sortie.
Le fichier d’entrée ayant été lu, il
est temps de fermer les deux fichiers
avec la fonction fclose (close file) (en
I). Le paramètre unique est le pointeur
vers un fichier ouvert précédemment.
Pour alléger le code, j’ai volontairement
négligé la reprise sur erreur et
l’analyse des codes d’erreur. (Pour en
savoir plus à ce sujet, voir l’article
« Error Handling with Unix-Type APIs »,
www.itpro.fr Club Abonnés.)
Téléchargez cette ressource

Gagner en cyber-résilience avec Insight & Bitdefender
Dans un environnement en constante mutation, où les cyberattaques deviennent plus nombreuses et plus sophistiquées, et où les SI se complexifient par la multiplication des offres SaaS et le multi cloud, les entreprises doivent repenser leur approche de la cybersécurité et faire évoluer leurs bonnes pratiques. Comment gagner en Cyber résilience ?
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Quel est l’impact du stockage des données sur le climat ?
- Les piliers de la création de valeur business
- Industrie 4.0 : Comment l’analyse de données enrichie par les capteurs et augmentée par l’IA optimise la production automobile
- Vidéo Protection des données avec Purview !
- Le pari de la FemTech : améliorer la santé des femmes
