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



Documents pareils
Programmation système de commandes en C

Arguments d un programme

Cours 6 : Tubes anonymes et nommés

Cours Programmation Système

Le prototype de la fonction main()

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

Programmation système en C/C++

Programmation système I Les entrées/sorties

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

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 aux Systèmes et aux Réseaux

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

Programmation Système (en C sous linux) Rémy Malgouyres LIMOS UMR 6158, IUT département info Université Clermont 1, B.P.

Les processus. Système L3, /39

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

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Introduction au langage C

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

Les structures de données. Rajae El Ouazzani

Simulation d un système de paiement par carte bancaire

Les structures. Chapitre 3

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

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

Systeme d'exploitation

Programmation impérative

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

Outils pour la pratique

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

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

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

Java Licence Professionnelle CISII,

Algorithmique et Programmation, IMA

INFO-F-404 : Techniques avancées de systèmes d exploitation

I. Introduction aux fonctions : les fonctions standards

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

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

Cours Langage C/C++ Programmation modulaire

Communication Interprocessus

Communication sous UNIX les sockets

Derrière toi Une machine virtuelle!

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Playing with ptrace() for fun and profit

OS Réseaux et Programmation Système - C5

Système et réseaux (SR1) Gestion des utilisateurs

GESTION DES FICHIERS C/UNIX

Programmation Classique en langage C

Le traitement du temps

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

Lier Erlang avec d autres langages de programmation

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Chapitre 5 : Les procédures stockées PL/SQL

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

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Programmation Réseau SSH et TLS (aka SSL)

Cours 14 Les fichiers

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

Programmation système

Gestion des fichiers. Telecom-ParisTech BCI Informatique

Cours de Système : Gestion de Fichiers

Langages et Concepts de Programmation Introduction à la programmation en langage C

Exercice sur les Dockers


Programme awk------introduction rapide

COMPARAISONDESLANGAGESC, C++, JAVA ET

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

Gestion de la mémoire

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Architecture d un système d exploitation

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

1 Mesure de la performance d un système temps réel : la gigue

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Cours de C. Allocation dynamique. Sébastien Paumier

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

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

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

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

Gestion des processus

Programmation C. J.-F. Lalande. 15 novembre 2012

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

INITIATION A LA PROGRAMMATION

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

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

Chapitre 4 : Outils de communication centralisés entre processus

INF 104 (SELC) Introduction au langage C

Notes de Cours - Programmation Pascal Ferraro

Le langage C. Séance n 4

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Programmation en C - Sommaire

Optimisations des SGBDR. Étude de cas : MySQL

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

Serveur d application WebDev

Programmer en JAVA. par Tama

Exécutif temps réel Pierre-Yves Duval (cppm)

Les processus 2/54. Qu est-ce qu un processus? 3(6)/54. Se souvenir 1(1)/54. Le système de fichiers (exemple du disque dur)

Systèmes d exploitation

Transcription:

3IS - Système d'exploitation linux - Programmation système 2010 David Picard Contributions de : Arnaud Revel, Mickaël Maillard picard@ensea.fr

Environnement Les programmes peuvent être exécutés dans des contextes très différents Application terminal Application graphique/interactive service/tâche de fond Il est souvent nécéssaire d'avoir accès à des informations sur différents paramètres Du système d'exploitation De l'utilisateur lançant le programme De la session dans laquelle le programme est lancée Ces informations sont accessibles via l'environnement

Variables d'environnement Les variables d'environnement sont des chaînes de caractères de la forme NOM=VALEUR ex : HOSTNAME=eris Un certain nombre de variables sont initialisées lors de la création du processus ex : $PATH L'environnement est hérité du père après fork()

extern char ** environ Les chaînes sont stockées dans une variable externe environ, initialisée au démarrage du programme Le dernier élément pointé du tableau est NULL

Exemple de programme #include <stdio.h> extern char ** environ; int main(int argc, char ** argv) { int I = 0; for(i = 0 ; environ[i]!= NULL ; i++) { printf( %d : %s\n, i, environ[i]); return 0;

Accéder à une variable On a souvent besoin de s'intéresser à seulement quelques variables d'environnement bien choisies La bibliothèque C fournit des fonctions pour ceci getenv(), setenv(), putenv() Pas d'espace dans le nom de la variable Sensibilité à la casse (HOME différent de Home)

Exemple de getenv() #include <stdio.h> <stdlib.h> int main(int argc, char **argv) { int i; char* variable; for(i = 1 ; i < argc ; i++) { variable = getenv(argv[i]); if(variable == NULL) printf( %s non définie\n, argv[i]); else printf( %s : %s \n, argv[i], variable); return 0;

int putenv(const char * chaine); Pour ajouter ou modifier une variable (chaine de la forme VARIABLE=VALEUR ) int setenv(const char * nom, const char * valeur, int ecraser); Pour ajouter ou modifer une variable (ecraser sert a gérer les droits de remplacement d'une variable) void unsetenv(const char * nom); Pour supprimer une variable d'environnement

Hérédité L'environnement est transmis d'un processus père à son fils par duplication Toute modification après le fork() ne propage pas les changements au père/fils

Variables populaires HOME : répertoire de l'utilisateur lançant le programme SHELL : interpreteur de commande par défaut de l'utilisateur TERM : type de terminal utilisé PATH : chemin dans lesquels se trouvent les programmes (séparés par ':') USER ou LOGNAME : nom de l'utilisateur

Options de programme Les arguments passés à un programme sont récupérés en arguments de la fonction main() int argc permet de savoir combien d'arguments ont été passés char ** argv permet d'avoir un tableau de chaine de caractères contenant les arguments argv[0] contient généralement le nom du programme

Options et arguments Les programmes unix permettent souvent de passer des options en plus des arguments Ex : -f, -v, -r Certaines options prennent elles-mêmes un argument Ex : l'option -f de tar nécéssite le nom du fichier à archiver La lib C permet d'accéder facilement aux options de la norme Posix

getopt() /* parcours la list des arguments et renvoie le caractère correspondant à l'option courante. Renvoie -1 si toutes les options on été parcourrues. Renvoie? Si le caractère est non reconnu comme option valide */ int getopt(int argc, char ** argv, const char * options); /* compteur d'indice dans le tableau argv */ int optind; /* affiche un message d'erreur sur stderr si différent de zséro, lorsque qu'un option non reconnue est parsée */ int opterr; /* contient le caractère passé en option en cas d'option non reconnue */ int optopt; /* contient l'argument de l'option si besoin */ char * optarg;

#include <stdio.h> <unistd.h> int main(int argc, char ** argv) { char* list_options = ac: ; int option; opterr = 0; // pas de message en cas d'erreur while( (option = getopt(argc, argv, list_options))!= -1) { switch(option) { case 'a' : printf( option a\n ); break; case 'c' : printf( option c avec paramètre %s\n, optarg); break; case '?' : printf( option non reconnue : %c\n, optopt); break; while (optind!= argc) printf( argument restant : %s\n, argv[optind++]); return 0;

Fonctions simplifiées pour exécuter un sous-programme FILE *popen(const char *command, const char *type); Construit un pipe en lecture ou écriture (argument type) fork Exécute /bin/sh en lui passant command comme argument Le FILE* passé en retour permet d'écrire (resp. de lire) sur l'entrée (resp. la sortie) standard du programme invoqué int pclose(file *stream); Sert à fermer un pipe ouvert avec popen()

I/O non bloquantes Intéressant quand on ne veut pas mettre le processus en attende d'i/o Fonction fcntl(int fd, int command, ) Effectue une opération sur le descripteur de fichier fd Troisième argument optionnel Insertion de l'attribut O_NONBLOCK au descripteur de fichier avec la commande F_SETFL

#include <fcntl.h> <stdio.h> #include <stdlib.h> <unistd.h> int main(void) { int tube[2]; char c; if(pipe(tube)!=0) exit(1); if(fork() == 0) { close(tube[0]); while(1) { write(tube[1], &c, 1); usleep(700000); else { close(tube[1]); fcntl(tube[0], F_SETFL, O_NONBLOCK); while(1) { if(read(tube[0], &c, 1) == 1) printf("read Ok\n"); else printf("read raté\n"); usleep(100000); return 0;