Vous êtes sur la page 1sur 3

1

Lieu: Polytech Intl Nature: Examen


Année: 2017-2018 Session: Principale, Semestre 1
Diplôme: IRM Date et heure: 03/01/2018 à 08h30
Classe: 2-1 & 2-2 Durée: 01h30
Module: Système d’exploitation Documents: Non Autorisés
Enseignant: Marouane B.H.Ayech Calculatrice: Non Autorisée

Exercice 1 (8 pts)
Soit le code C d’un fichier code.c :
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char ∗∗argv)


{
char s1[10];
printf(”Entrer un entier:”);
scanf(”%s”,s1);
int x=atoi(s1);
char s2[10];
printf(”Entrer un entier:”);
scanf(”%s”,s2);
int y=atoi(s2);
int z = x/y;
printf(”Division de %d par %d = %d\n”,x,y,z);
}

1. Ecrire le script Makefile qui permet de générer l’exécutable demo à partir du code
source code.c
2. Ecrire le code à ajouter au fichier code.c pour masquer les interruptions Ctr+c et
Ctr+AltGr+\.
3. Ecrire le code à ajouter au fichier code.c pour gérer le bug de division par 0.
Exercice 2 (12 pts)
1. Ecrire le code C d’un fichier code_read_save.c qui permet de :
— saisir deux entiers
— enregistrer ces deux entiers dans un fichier dont le nom est passé en paramètre
lors de l’éxecution.
→ Exemple :
Soit read_save le nom de l’éxecutable obtenu après la compilation.
Voici un scénario d’éxecution :
> ./read save data.txt
Entrer un entier: 10
Entrer un entier: 20
Les deux entiers sont enregistres dans le fichier data.txt

2. A l’aide de la variable errno reécrire le code de code_read_save.c pour répondre


aux 2 bugs ci-dessous qui peuvent avoir lieu lors de l’éxecution
— Bug 1 :
> ./read save
Specifier le nom de fichier dans lequel on va enregistrer les donnees
— Bug 2 :
> ./read save data.txt
On n’a pas le droit de ecrire dans le fichier data.txt

3. Ecrire le code C d’un fichier code_read_calcul.c qui permet de :


— ouvrir un fichier passé comme paramètre lors de l’éxecution.
— lire deux entiers à partir du fichier ouvert
— affichier la somme de 2 entiers sur console
→ Exemple :
Soit read_calcul le nom de l’éxecutable obtenu après la compilation.
Voici un scenario d’execution :
> ./read calcul data.txt
La somme de 10 et de 20 = 30

4. A l’aide de la variable errno reécrire le code de code_read_calcul.c pour répondre


aux 3 bugs ci-dessous qui peuvent avoir lieu lors de l’éxecution
— Bug 1 :
> ./read calcul
Specifier le nom de fichier a lire
— Bug 2 :
> ./read calcul data1.txt
Le fichier data1.txt est inexistant
— Bug 3 :
> ./save read data.txt
On n’a pas le droit de lire le fichier data.txt

5. Ecrire le code de fichier run_read_save.c qui exécute l’exécutable read_save


6. Ecrire le code de fichier run_read_calcul.c qui exécute l’exécutable read_calcul
7. Ecrire le code de fichier run_read_save_calcul.c qui exécute dans l’ordre l’exécutable
read_save puis l’exécutable read_calcul
Annexe
1. Les signaux :

Signal Description
SIGINT signal utulisateur envoyé vers processus courant si l’utilisateur tape Ctr+c
SIGQUIT signal utilisateur envoyé vers processus courant si l’utilisateur tape Ctr+AltGr+\
SIGFPE signal envoyé vers le processus courant pour interdire la division par 0

2. Appels système de gestion des fichiers

Fonction Description
FILE * fid = fopen( Cette fonction permet d’ouvrir un fichier
nom_fichier,mode_access) Les paramètres sont :
- nom_fichier : nom de fichier à ouvrir
- mode_access : peut prendre certaines valeurs :
* valeur r : signifie que le fichier est ouvert pour lire son contenu
* valeur w : signifie que le fichier est ouvert pour écrire dedans
Si l’ouverture réussit, cette fonction retourne un pointeur fid vers le
tampon de fichier ouvert
fscanf(fid,format,x) Cette fonction permet de lire d’un fichier
Les paramètres sont :
- fid : pointeur de tampon de fichier ouvert.
- format : format de la varible x.
- x : adresse de la variable qui contiendra les données lues
fprinf(fid,format,x) Cette fonction permet d’écrire dans un fichier
Les paramètres sont :
- fid : pointeur de tampon de fichier ouvert.
- format : format de1 la varible x.
- x : adresse de la variable qui contiendra les données à écrire

3. Valeurs possibles de errno en cas d’échec de l’appel système fopen() :

Valeur Description
EFAULT Si on ne spécifie pas le nom de fichier
dans la fonction fopen()
ENOENT Si on essaie de lire un fichier inexistant avec
la fonction fopen()
EACCES Si on n’a pas les permissions pour lire ou
écrire dans un fichier existant avec la fonction
fopen()

Vous aimerez peut-être aussi