Un petit test de boucle. Un petit exec!!! Par fainéantise. Récupérer les variables d'environnement

Documents pareils
Programmation système de commandes en C

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)

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

Cours 6 : Tubes anonymes et nommés

Introduction au langage C

Les processus. Système L3, /39

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

Cours Programmation Système

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

Le prototype de la fonction main()

Programmation système en C/C++

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

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

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

Programmation système I Les entrées/sorties

Introduction aux Systèmes et aux Réseaux

Programmation système

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

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


Java Licence Professionnelle CISII,

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

Gestion des processus

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

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

Communication Interprocessus

Programmation Classique en langage C

COMPARAISONDESLANGAGESC, C++, JAVA ET

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

Communication par sockets

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

Simulation d un système de paiement par carte bancaire

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Derrière toi Une machine virtuelle!

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

Arguments d un programme

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Lier Erlang avec d autres langages de programmation

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

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

TP2 : tableaux dynamiques et listes chaînées

Programmer en JAVA. par Tama

Le langage C. Séance n 4

Programmation Réseau SSH et TLS (aka SSL)

Algorithmique et Programmation, IMA

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

OS Réseaux et Programmation Système - C5

Cours de C. Allocation dynamique. Sébastien Paumier

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

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

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

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

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

Cours de programmation avancée. Le langage C. Université du Luxembourg

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

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

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

Programmation client-serveur sockets - RPC

Cours de Systèmes d Exploitation

Unix : Programmation Système

Les processus légers : threads. Système L3, /31

Cours de Système : Gestion de Fichiers

Applications client/serveur TCP/IP - Sockets Rappels. C.Crochepeyre Applications CS 1

Architecture des ordinateurs

Les fichiers. Chapitre 4

Exercice sur les Dockers

INF 104 (SELC) Introduction au langage C

Java Licence Professionnelle CISII,

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

Conventions d écriture et outils de mise au point

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

1 Lecture de fichiers

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

SUPPORT DE COURS. Langage C

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Les arbres binaires de recherche

Programmation en langage C

Corrigé des exercices sur les références

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

Une introduction à Java

Introduction à la Programmation Parallèle: MPI

Corrigé des TD 1 à 5

Corrigés des premiers exercices sur les classes

INITIATION A LA PROGRAMMATION

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Le traitement du temps

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Playing with ptrace() for fun and profit

Architecture d un système d exploitation

TD3: tableaux avancées, première classe et chaînes

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programmation en langage C Eléments de syntaxe

Communication sous UNIX les sockets

Les structures. Chapitre 3

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

Cours 14 Les fichiers

Gestion de la mémoire

AWS avancé. Surveiller votre utilisation d EC2

Transcription:

Un petit test de boucle int i; //ma variable compteur for(i=0;i<10;i++) printf("et voici %i\n",i); //ma boucle //je sors proprement Un petit exec!!! printf("exec de ps avec system\n"); execlp("ps","ps",null); //inutile, vous verrez pourquoi... Par fainéantise printf("exec de ps avec system\n"); system("ps -ax"); //je sors proprement Récupérer les variables d'environnement int main(int argc, char **argv) { char * env1; /* pour accueillir les deux valeurs */ char * env2; env1=getenv("env1\0"); /* je vais chercher les deux variables

d'environnement */ env2=getenv("env2\0"); printf("env1 vaut %s\n",env1); printf("env2 vaut %s\n",env2); Test du fork pid_t pid; //pour recevoir la réponse de fork() int n; printf("les forks\n"); pid = fork(); // je fork!! printf("la fonction m'a répondu %i\n",pid); //j'affiche la valeur récupérée printf("termine\n"); Papa et fiston se disputent la sortie standard pid_t pid; int n; printf("les forks\n"); pid = fork(); if (pid==0) { for(n=0;n<5;n++) { printf("je suis le fils\n"); sleep(3); else { for(n=0;n<5;n++) { printf("je suis le pere de %i\n",pid); sleep(1); printf("termine\n");

Papa commande, et les fistons obéissent.. int main(int argc, char **argv) { int attente; int i; //gestion du paramétrage attente=atoi(getenv("attente\0")); //traitement des arguments for (i=1;i<argc;i++) { //Attention, on commence à 1!!! char * cde=argv[i]; // on stocke la commande voulue pid_t p=fork(); if(p==0) { //je suis le fils printf("je suis le fils chargé de faire %s\n",cde); printf("j'attends %i cycles\n",attente); sleep(attente); execlp(cde,cde,null); //inutile, mais on est jamais trop prudent else { //on est le père printf("%i se charge du boulot\n",p); Les fils parlent au père #include <sys/wait.h> int main(int argc, char **argv) { int i; for (i=1;i<argc;i++) { //Attention, on commence à 1!!!

char * cde=argv[i]; // on stocke la commande voulue pid_t p=fork(); if(p==0) { //je suis le fils printf("je suis le fils chargé de faire %s\n",cde); sleep(1); execlp(cde,cde,null); //inutile, mais on est jamais trop prudent else { //on est le père printf("%i se charge du boulot\n",p); //wait(); //on attends le fils pid_t retour; int status; retour=waitpid(-1,&status,0); printf("on a eu le retour de %i\n",retour); Aux armes #include <signal.h> int nbvies=5; //compteur de vie void wounded(int s) { printf("aie! tu m'as fait %i\n",s); nbvies--; void rebirth(int s) { puts("et hop, ça repart"); nbvies+=5; int main(int argc, char * argv[]) { if(signal(sigint,wounded)==sig_err) { perror("plantage de la gestion du signal CTRL-C"); exit(1);

if(signal(sigusr1,rebirth)==sig_err) { perror("plantage de la gestion du signal SIGUSR1"); exit(1); while(nbvies>0) { sleep(1); printf("il me reste %i vies\n",nbvies); Premier exo des pipes : un fils qui met le clavier en majuscules pour le père #include <string.h> #include <fcntl.h> #include <ctype.h> int p[2]; //les files descriptors sont en global, pour être visibles partout void parent() { //ici, le père qui lit dans le pipe pour afficher... //quelques messages pour agrémenter le fonctionnement char msg_wait[] = "Waiting...\n"; char msg_read[] = "Just read : " ; char msg_done[] = "End of file. Bye!\n"; int readlen,buflen = 10 ; char buf[buflen] ; close(p[1]); //fermeture du file descriptor inutile while (1) { if ( write(1,msg_wait,strlen(msg_wait)) == -1 ) { readlen = read(p[0],buf,buflen); //On lit vraiment ici if ( readlen == -1 ) { perror("read"); if (! readlen ) break; if ( write(1, msg_read, strlen(msg_read)) == -1 ) {

if ( write(1, buf, readlen) == -1 ) { if ( write(1, "\n", 1) == -1 ) { if ( write(1, msg_done, strlen(msg_done) ) == -1 ) { void child() { //ici, le fils qui va lire le clavier, puis envoyer au père) close(p[0]); char c; //le char qui va accueillir la saisie while (1==read(0,&c,1)) { //1 car. par car., notez le pointeur c=toupper(c); //conversion if ( write(p[1], &c, 1 ) == -1 ) { int main(int argc,char* argv[]) { if ( pipe(p) == -1 ) { perror("pipe"); switch ( fork() ) { //gestion standard père fils case -1: perror("fork"); case 0: child(); default: parent(); return 0; /* never reached */