Cours informatique : Maîtrise de Sciences Cognitives 2002-2003

Session 2 : Structure d'un programme, entrées-sorties, variables simples, tableaux, chaînes de caractères

Structure d'un programme

Un programme source en C est constitué

 

Exemple sur le dernier exercice :

#include<stdio.h> /*Directive de précompilation (le préprocesseur va inclure le fichier entête stdio qui "déclare" les fonctions standard d'entrée-sortie*/

 

/* pas de déclaration ni définition globale*/

int main() /* définition de la fonction principale main qui dans cet exemple est supposée retourner un entier et ne possède pas d'arguments d'appel*/

{/* accolade de début de la fontion principale */

char c; /* déclaration d'une variable de type "char"*/

printf("Entrez un caractère : \n (p pour quitter) \n"); /* appel de la fonction printf avec un seul argument : une constante chaîne de caractères*/

/* la valeur retournée par la fonction printf n'est pas exploitée ici */

for (c=` `;c!=`p`; ) /* Pour (c étant initialement avec la valeur ` ` (espace);jusqu'à ce que c soit différent de la valeur `p`; pas d'opération particulière à chaque itération*/

{/* accolade de début du bloc d'instructions du "for"*/

c=getc(stdin); /* appel de la fonction "getc" avec comme argument "stdin"; la valeur retournée est mise dans la variable c*/

putc(c,stdout); /*appel de la fonction "putc" avec comme arguments "c" et "stdout"; la valeur retournée n'est pas exploitée*/

}/* accolade de fin du bloc d'instructions du "for" */

printf(" /n au revoir /n");

return 0;/* positionnement de la valeur 0 à retourner par la fonction principale ; cette valeur pourra être testée par le programme (le plus souvent l'interpréteur de commande qui a lancé l'exécution de ce programme*/

}/* accolade de fin de fonction principale */

 

Rappel sur la notion de processus

Un processus est un "programme en train de s'exécuter". C'est le système d'exploitation qui contrôle cette exécution. Chaque processus est identifié par le système d'exploitation par un Identificateur de Processus (Pid). Chaque processus est caractérisé par les zones mémoires qu'il occupe pour ses données, son code et son descripteur, par des droits, par des flux d'entrée-sortie ouverts pour lui. Par défaut, tout processus se voit attribuer 3 flux d'entrée-sortie standard (stdin, stdout et stderr).

Il faut voir les entrées-sorties standard comme des "flux" d'octets qui sont disponibles en entrée ou en sortie du processus. En entrée ces flux sont alimentés par un périphérique ou un fichier ou un flux de sortie d'un autre processus. En sortie, le flux est traité par un périphérique ou dirigé vers un fichier ou vers un flux d'entrée d'un autre processus (voir illustration en figure 3)

Un programme en train de s'exécuter utilise essentiellement 2 segments mémoires : un segment de mémoire pour les données et un segment de mémoire pour le code exécutable.

Toute référence à une donnée est faite de manière relative au début du segment de donnée.

Le segment de donnée alloue la mémoire selon deux techniques : la "pile" et le "tas".

Figure 1 : les flux d'entrée-sortie standard d'un processus

Figure 2 : exemple d'enchaînement de flux entre processus (notion de redirection de flux)

Figure 3 : l'allocation d'un segment de mémoire ; notion de pile et de tas.

Il faut voir les entrées-sorties standard comme des "flux" d'octets qui sont disponibles en entrée ou en sortie du processus. En entrée ces flux sont alimentés par un périphérique ou un fichier ou un flux de sortie d'un autre processus. En sortie, le flux est traité par un périphérique ou dirigé vers un fichier ou vers un flux d'entrée d'un autre processus.