M3101 Principes des systèmes d exploitation. Les fichiers

Documents pareils
GESTION DES FICHIERS C/UNIX

Programmation système de commandes en C

Le système de gestion des fichiers, les entrées/sorties.

Cours 6 : Tubes anonymes et nommés

Programmation système en C/C++

Programmation système I Les entrées/sorties

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

Cours de Système : Gestion de Fichiers

Les processus. Système L3, /39

LEs processus coopèrent souvent pour traiter un même problème. Ces

3IS - Système d'exploitation linux - Programmation système

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Introduction au langage C

Plan global. Programmation système II. Socket du domaine UNIX. Plan. Socket UNIX, Terminaux, Async IO, Mémoire, ELF.

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Le prototype de la fonction main()


Architecture des ordinateurs

Les fichiers. Chapitre 4

Programmation C. Apprendre à développer des programmes simples dans le langage C

Gestion des fichiers. Telecom-ParisTech BCI Informatique

Structure d un programme

Plan du cours. Historique du langage Nouveautés de Java 7

Le langage C. Séance n 4

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

SYSTÈME DE GESTION DE FICHIERS

Exonet : sauvegarde automatisée d une base de données

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Rappels Entrées -Sorties

Simulation d un système de paiement par carte bancaire

1 Lecture de fichiers

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Flux de données Lecture/Ecriture Fichiers

Java Licence Professionnelle CISII,

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Programmation impérative

Communication par sockets

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Compression de Données - Algorithme de Huffman Document de Conception

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Claude Delannoy. 3 e édition C++

Architecture d un système d exploitation

Qu'est-ce qu'un processus: Définitions

LA mémoire principale est le lieu où se trouvent les programmes et les

Cours de Systèmes d Exploitation

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Arguments d un programme

Conventions d écriture et outils de mise au point

Programmation client-serveur sockets - RPC

Programmation C++ (débutant)/instructions for, while et do...while

TP : Gestion d une image au format PGM

Bases de programmation. Cours 5. Structurer les données

Premiers Pas en Programmation Objet : les Classes et les Objets

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

INFO-F-105 Language de programmation I Séance VI

Communication Interprocessus

COMPARAISONDESLANGAGESC, C++, JAVA ET

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Les débordements de tampons et les vulnérabilités de chaîne de format 1

Cours d initiation à la programmation en C++ Johann Cuenin

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Outils pour la pratique

Le traitement du temps

as Architecture des Systèmes d Information

Structure fonctionnelle d un SGBD

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Projet de programmation (IK3) : TP n 1 Correction

Cours d Algorithmique et de Langage C v 3.0

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Introduction à l algorithmique et à la programmation M1102 CM n 3

Programmation en langage C

Introduction aux Systèmes et aux Réseaux

Représentation d un entier en base b

Cours 1: Java et les objets

La Comptabilité UNIX System V Acctcom

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Java Licence Professionnelle CISII,

INF 104 (SELC) Introduction au langage C

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Initiation. àl algorithmique et à la programmation. en C

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

AWS avancé. Surveiller votre utilisation d EC2

Support de Cours de Langage C. Christian Bac

Les attaques par corruption de mémoire Synopsis Mickael Deloison 22/10/2008

Programmation Classique en langage C

Transcription:

M3101 Principes des systèmes d exploitation Les fichiers IUT d Orsay DUT Informatique 2015 / 2016

Les fichiers, les processus et le noyau A 0 1 2 3 4 5 entrée sortie erreur descripteurs de fichiers attributs d état position inœud pts/5 propriétaire groupe taille type permissions atime mtime ctime compteur de références périphérique inœud (physique) infos spécifiques au type (dans chaque PCB) td3exo1.c descriptions de fichiers ouverts (table globale du noyau) inœuds 2 / 14

Les fichiers, les processus et le noyau A 0 1 2 3 4 5 B 0 1 2 3 4 5 attributs d état position inœud pts/5 td3exo1.c propriétaire groupe taille type permissions atime mtime ctime compteur de références périphérique inœud (physique) infos spécifiques au type descriptions de fichiers ouverts unistd.h descripteurs de fichiers inœuds 3 / 14

Les primitives open() crée une nouvelle description de fichier ouvert dans la table globale des fichiers ouverts. Réserve un nouveau numéro descripteur de fichier pour le processus (et le lui renvoie). read() transfère des données depuis le fichier vers la mémoire. Avance la position dans la description de fichier ouvert. write() transfère des données depuis la mémoire vers le fichier. Avance la position dans la description de fichier ouvert. lseek() modifie la position dans la description de fichier ouvert. close() libère le numéro descripteur et, éventuellement, détruit la description de fichier ouvert. fcntl() modifie les attributs d un fichier ouvert. Toutes les primitives travaillent avec des descripteurs de fichiers. 4 / 14

Opérations sur les fichiers Selon le niveau du langage et des bibliothèques utilisés : primitives système C / libc C++ descripteur de fichier structure «fichier» objet flux d entrée-sortie int FILE* iostream 0 stdin cin 1 stdout cout 2 stderr cerr read() fscanf() >> write() fprintf() << pas de conversion, conversion selon conversion selon données brutes le code de format le type d argument 5 / 14

Ouvrir un fichier int open(const char *chemin, int drapeaux); int open(const char *chemin, int drapeaux, mode_t mode); int creat(const char *chemin, mode_t mode); chemin le nom du fichier à ouvrir drapeaux Un et un seul de O_RDONLY, O_WRONLY ou O_RDWR. En plus, avec l opération («ou» bit-par-bit) : O_APPEND, O_CREAT, O_EXCL, O_TRUNC, O_NONBLOCK, O_DIRECT, O_SYNC, O_ASYNC... mode en cas de création, par O_CREAT ou creat(), le droits d accès en octal, comme pour chmod : par exemple, 0644 correspond à rw-r--r-- Renvoient le numéro de descripteur attribué au fichier ouvert (ou 1). 6 / 14

Ouvrir un fichier 1. Le noyau retrouve l inœud du fichier indiqué par le chemin O_CREAT est parmi les drapeaux et le fichier n existe pas un nouveau inœud est créé avec les permissions dans mode O_CREAT et O_EXCL sont parmi les drapeaux et le fichier existe open() échoue O_WRONLY / O_RDWR et O_TRUNC sont parmi les drapeaux le fichier est remis à vide 2. Une nouvelle description de fichier ouvert est créée : les attributs d état sont les drapeaux (modifiables par fcntl()) la position (le n o du prochain octet à lire ou à modifier) est mise à 0 pointe sur l inœud du fichier 3. Le premier descripteur libre dans la table de descripteurs du processus pointe sur la nouvelle description. 7 / 14

Ouvrir un fichier A 0 1 2 3 4 5 B 0 1 2 3 4 5 attributs d état position inœud O_RDRW 3261 O_RDONLY 0 pts/5 td3exo1.c propriétaire groupe taille type permissions atime mtime ctime compteur de références périphérique inœud (physique) infos spécifiques au type descriptions de fichiers ouverts unistd.h descripteurs de fichiers inœuds 8 / 14

Fermer un fichier int close(int descripteur); 1. Libère le descripteur 2. S il n y a plus de pointeurs sur la description de fichier ouvert, alors elle est detruite. 3. Met à jour les informations dans l inœud si le nombre de références (hard links) dans l inœud est 0 et il n y a plus de descriptions de fichier ouvert pour cet inœud, alors l inœud est détruit et le fichier n est plus accessible si close() renvoie 1, alors l état du fichier est inconnu, perte de données possible 9 / 14

Lire des données sur un fichier int read(int fdesc, void *tampon, size_t nboct); Lit des données à partir de la position courante. fdesc le descripteur de fichier tampon stocker les données lues à partir de cette adresse nboct le nombre maximum d octets à lire Renvoie le nombre d octets lus ( nboct). Augmente la valeur de position du même nombre. Renvoie 0 en cas de fin de fichier. Renvoie 1 en cas d erreur. 10 / 14

Écrire des données sur un fichier int write(int fdesc, const void *tampon, size_t nboct); Si O_APPEND est parmi les attributs d état, met la position à la fin du fichier. Écrit des données à partir de la position courante. fdesc le descripteur de fichier tampon prendre les données à écrire à partir de cette adresse nboct le nombre maximum d octets à écrire Renvoie le nombre d octets écrits ( nboct). Augmente la valeur de position du même nombre. Renvoie 1 en cas d erreur. 11 / 14

Changer la position courante off_t lseek(int fdesc, off_t depl, int origine); Modifie la position courante dans la description de fichier ouvert. fdesc le descripteur de fichier depl le nombre d octets à sauter origine SEEK_SET par rapport au début du fichier SEEK_CUR par rapport à la position courante SEEK_END par rapport à la fin du fichier Renvoie la nouvelle valeur de position ou 1 en cas d erreur. Les descripteurs qui regardent la même description partagent la position. read(), write(), lseek() dans un processus fils affectent le père 12 / 14

Exemple : un simple cat 1 int main (int argc, char ** argv) { 2 int fdesc, nboct; 3 char tampon[256] = {0}; 4 if (argc <= 1) exit(1); // contrôle paramètres 5 fdesc = open(argv[1], O_RDONLY); // ouverture 6 if (fdesc == -1) { perror("open() error"); exit(1); } 7 while (1) { 8 nboct = read(fdesc, tampon, 256); // lecture 9 if (nboct == -1) { perror("read() error"); exit(1); } 10 if (nboct == 0) break; // fin du fichier 11 write(1, tampon, nboct); // écriture 12 } 13 close(fdesc); // fermeture 14 return 0; } 13 / 14

Et pour les répertoires? Dans la bibliothèque standard de C : «flux répertoire», type DIR opendir() ouvre un répertoire et renvoie un DIR* closedir() ferme un flux répertoire readdir() lit l entrée suivante depuis un flux répertoire telldir() renvoie la position courante dans un flux répertoire seekdir() change la position courante dans un flux répertoire rewinddir() positionne un flux répertoire au début du répertoire 14 / 14