0-TECHNIQUES DE PROGRAMMATION Alias Programmation en C Loïc Cuvillon [email protected] 1 Plan cours no. 0 • Objectifs du cours 5 • Déroulement et contenu du cours 8 • Le langage C (préface) 11 • Unix et le Shell 26 2 Programmation Programme : • séquence d’instructions qui spécifie les étapes pour obtenir un résultat ou réaliser une tâche Programmer ou coder : • concevoir, écrire, tester, déboguer et maintenir un programme 3 Des programmes Manipuler, visualiser et transmettre l’information • le traitement de texte, la calculatrice (bureautique) • skype, firefox, facebook • vlc, lecteur mp3 Créer et se distraire • les jeux vidéos • la création numérique (demo-making, photoshop) 4 Objectifs Acquérir : • le fonctionnement interne d’un ordinateur • un langage de programmation polyvalent (le langage C) • Pour concevoir des programmes : • Analyse et Simulation numérique • projets math-info 1A • théorème des 4 couleurs • Acquisition et traitement de données expérimentales • Commande de systèmes, de robots 5 Objectifs • Exemple d’interface graphique d’acquisition en GTK 6 Objectifs • Commande de robots : Option Mécatronique, Commande numérique2A 7 Volume horaire et ressources • 10 cours de 1h45 • 7 TPs de 4h sous environnement Linux (windows négligé) • Documents et exemples de programme C dans l’Intranet • Le K&R: • le livre de référence • par Kernighan et Ritchie • Le site du zéro : Programmer en c • http://www.siteduzero.com/ 8 Evaluation • Cours (en contrôle continu): • 40% de la note sur QCM de début de cours et travaux rendus • 60% examen final sur feuille (1h30-2h) • TPs (en contrôle terminal) • Examen final sur machine Linux (4h) 9 Plan prévisionnel • Architecture des ordinateurs et codage binaire • Le langage C • Variables • Instructions • Fonctions • Tableaux et pointeurs • Fichiers • Structures avancées en C • Exemple avancés (interface graphique, réseau) 10 Le langage C • par Dennis Ritchie (AT&T Bell, 1972) • lié à la création du système UNIX • sur un DEC PDP-11 (1973) • dérivé du langage B, lui-même inspiré du BCPL • un langage très utilisé • par le succès d’UNIX • popularité: 1er du TIOBE index 2012 • • (2ème Java, 3ème objective-C, 4ème C++) permet un accès bas niveau = direct au matériel (mémoire) performant (grande rapidité d’exécution) 11 Le langage C • utilisé en particulier pour programmer : • des systèmes exploitation (OS) : Unix, Linux, OS-X, Windows XP • des bases de données • des micro-controlleurs/processeurs : smartphone, automobile • … (peut tout faire) 12 Le langage C • Avantages du C : • rapidité d’exécution : car proche du fonctionnement du matériel (CPU/mémoire) • grande liberté donnée au programmeur (additionner un entier avec un caractère) • portable: disponible sur toutes les plateformes • Inconvénients du C : • Manque fonctionnalités des langages plus évolués • Liberté de faire des erreurs (de planter) • «C is quirky, flawed and an enormous success » Ritchie 13 Le langage C • langages «haut niveaux» dérivés du C et orientés objets : • le C++ (2A) • Objective-C: une surcouche au C • utilisé par NEXT (fondé par Steve Jobs) puis OS X • langages influencé par le C (sa syntaxe) : • Java • Python • le PHP: the facebook technology 14 Le langage C Version/normalisation du langage C : • 1978 : le livre The C programming language, de-facto la première spécification • 1989-1990 : C normalisé par l’ISO, nommé ANSI C ou C89 ou C90 • 1999 : nouvelles extensions de la norme (C99) mais pas disponible partout L’ANSI-C est le sujet du cours. 15 Le langage C : exemples • Dennis Ritchie (1941- octobre 2011) Ce programme C affiche «Goodbye World» à l’écran. 16 Le langage C Autre exemple : Additionner les entiers 2 et 56 int main() {! ! !int a=2, b=56;! ! return (a+b);! ! }! • • • • main() est la fonction ou procédure principale int : déclare un entier (integer en anglais) printf(« ») : affiche un message à l’écran return() : renvoie un résultat 17 Le langage C un langage compilé : • compilation : traduction code c 3 +15 langage machine binaire 0011 0011 1111 (ADD 3(10) 15(10)) • le compilateur : le traducteur • langage machine : le seul compris par l’ordinateur par le processeur 18 Compilation du programme #include <stdio.h> 011001110101011001 001110011001110011 010000111100010101 010010011111000000 111110001000000000 … void main(void) { int i, j , k ; for (i=0;i>10;i+ +) { printf("%d \n",i) } } Code source C : • texte • ‘‘human readable’’ Le compilateur Programme : • langage machine Le langage C Citations : « Programmer en C, ce n’est que du bon sens paysan. » S.F, maître de conférences à Télécom Physique Strasbourg «La programmation en C, c’est de l’artisanat. On voit si l’artisan est bon en lisant le code source. » J.G, professeur à Télécom Physique Strasbourg 20 Le langage C sous Linux Fichier contenant le code en langage C : • appelé code source • extension .c par convention • éditable avec tout éditeur de fichier texte (.txt) helloworld.c édité avec gedit 21 Compilation sous Linux • gcc : le compilateur • options de compilation • -Wall : affiche tous les avertissements • -ansi -pedantic-errors : version ANSI du C • -lm : pour la librairie mathématique • -o : suivi du nom souhaité pour l’exécutable binaire (le programme) • compilation de helloworld.c dans un terminal : gcc –Wall –pedantic-errors –ansi -lm ! ! ! ! ! ! !helloworld.c –o helloworld! 22 Exécution sous Linux • exécution : ./helloworld! ! ! ! ! ! ! ! ! ! ! (./ pour le chemin relatif et le fichier doit avoir le droit d’exécution) Compilation et exécution de helloworld dans un terminal sous Linux. 23 Make • make est un utilitaire pour gérer la compilation • utilise un fichier de configuration dans le répertoire courant: makefile! • Le fichier makefile minimal contient pour notre cours: CFLAGS= -ansi –pedantic-errors -Wall LDFLAGS= -lm • La compilation se résume alors à la commande: make helloworld! 24 Make 25 UNIX système • Système d’ exploitation (1969) • 1973, écriture en C par Thomson and Ritchie • Multi-utilisateur, multi-tâches 26 27 UNIX système • Un noyau (kernel) • le cœur du système d’exploitation • partage le cpu entre les programmes et utilisateurs • gère le matériel (processeur, périphériques) • Un shell • interpréteur de commandes (commande mode texte) • interaction entre l’utilisateur et le système • Les utilitaires (programmes) • éditeur de texte, calculatrice • interface graphique (commande en mode graphique) • … 28 Les héritiers d’UNIX iOS Android 29 L’arborescence de fichiers UNIX • Des répertoires (directories) et des fichiers (files) • Répertoire de départ de l’arborescence : la racine, représentée par le symbole / (slash) • Des sous-répertoires : home, usr, bin! • Un répertoire personnel dans home pour chaque user : • appelé ‘home directory’ • porte le nom de login de l’utilisateur • exemple: /home/loic 30 L’arborescence de fichiers UNIX /! bin! home! loic! Exo.doc! toto! usr! Test.txt! Folder! 31 Le shell Interpréteur de commandes en mode texte : • Interaction avec le système d’exploitation et de fichiers • Permet de lancer des commandes et des programmes • (Le shell est lui-même un programme en mode texte) Création d’un shell par l’ouverture d’un terminal. 32 Le shell et le prompt Le prompt : une séquence de caractères • indique que le système attend une nouvelle commande • contient des informations : utilisateur, répertoire courant • finie par un caractère spécial (>, #, ou $) Identité utilisateur Identité machine (nom ordinateur) Répertoire courant : ~/Music (où je suis) 33 Les commandes du shell Format d’une commande : commande [options] [fichier(s)_ou_donnée(s)]! ! • une commande et des arguments/paramètres facultatifs • arguments : options et fichiers ou données • le séparateur est l’espace vide ‘ ‘ : • entre commande, options et le ou les fichiers/donnée Pour UN fichier : pas d’espace dans le nom ! (interprété comme plusieurs arguments par le shell) 34 La commande cd Changer de répertoire : cd (change directory) ou cd ~ • se déplacer dans son répertoire d’accueil (HOME) soit pour loic cuvillon : /home/loic • ~ = /home/loic , ~ est un raccourci/alias pour son home cd cd ..! • se déplacer dans le répertoire supérieur • .. est un alias pour le répertoire supérieur cd folder ou cd ./folder! • descendre dans le sous répertoire nommé folder! • . est un alias pour le répertoire courant 35 La commande cd Se déplacer au travers de plusieurs répertoires en 1 fois : • indiquer le chemin relatif (à partir du répertoire courant) 1. cd Music/Born_to_Die! ou cd ./Music/Born_to_die! ! 2. cd ../gotan_project! 3. cd ../../ loic! 1 Music! 2 Born_to _Die! 3 gotan_p roject! …! 36 La commande cd Se déplacer dans un répertoire, quelque soit le répertoire actuel : • indiquer le chemin absolu (à partir de la racine / ) 1. cd /home/loic/Music/Born_to_Die! 2. cd /home/loic/Music/gotan_project! 3. cd /home/loic! 1 ou cd ~ 2 3 loic! Music! Born_to _Die! gotan_p roject! …! 37 La commande ls Lister le contenu du répertoire : ls (list)! ls (ou ls .) • lister le répertoire courant ls folder ! ls /home/loic/folder! ls ../folder! • lister le répertoire indiqué par le chemin relatif ou absolu 38 La commande ls Quelques options de ls : ! -a! • lister aussi les fichiers/répertoires cachés, dont le nom commence par .! (ceci inclus le répertoire parent : .. ) -l (long format) • lister avec les informations des fichiers/répertoires ou –a -l! • combinaison de –a et -l -al 39 La commande ls droits sur le fichier, nom du groupe pour le user, group, d’utilisateurs autres: propriétaire r (read), utilisateur w(xrite) , propriétaire du x (execute) fichier date de modification nom taille du fichier (en octets) 40 La commande mkdir • Créer un répertoire : mkdir (make directory) mkdir U2! • créer le répertoire U2 dans le répertoire courant mkdir ../U2! • créer le répertoire U2 dans le répertoire parent (supérieur) 41 La commande cp Copier un fichier : cp file destination • si destination est un répertoire (..), copier file dedans • sinon copier file sous le nom destination! cp /home/loic/texte.txt .! • copier le fichier dans le répertoire courant cp texte.txt texte2.txt! • copier texte du répertoire courant en texte2 dans le répertoire courant ! 42 La commande cp Copier un répertoire : cp –r source_dir dest_dir • option –r (recursive) : copie récursive du répertoire cp –r Music MP3! • si MP3 est un répertoire existant, copier le répertoire Music dedans • sinon copier le répertoire Music sous le nom MP3 cp –r Music ..! • copie du répertoire Music dans le répertoire parent ! 43 La commande cp copie du répertoire Music en MP3 (Music et MP3 ont le même contenu) copie du répertoire Music dans MP3 copie du mp3 sous un autre nom et dans le répertoire courant 44 La commande mv Déplacer (renommer) un fichier : mv file dest (move) • si dest est un répertoire existant, y déplacer file • sinon renommer file en dest! Idem. si file est un répertoire mv file ..! • déplacer file dans le répertoire parent (couper/coller) mv file.txt ../file2.txt! • déplacer dans le répertoire parent et le renommer en file2.txt! 45 La commande mv Déplacer (renommer) un répertoire : mv Born_to_die/ ../Music/! • déplacer Born_to_die/ dans le répertoire Music/ (si Music existe déjà) 46 La commande mv Renommer Music/ (avec ou sans le / à la fin) en Mp3 Déplacer le fichier mp3 dans le répertoire Mp3/Born_to_die/ 47 La commande rm Effacer un fichier : rm file (remove) !rm test! !rm /home/loic/test.txt! !rm –i test! • option –i : demande confirmation à l’utilisateur avant d’effacer ! Effacer un répertoire et tout son contenu : rm –r Music/ • option –r (recursive) !! 48 La commande touch Crée un fichier vide : touch file_name • si le fichier existe déjà : heure de modification du fichier mise à jour avec l’heure courante (ls -l)! 49 Le caractère spécial * Le caractère ‘ * ’ : désigne toute chaîne de caractères • utile pour déplacer, copier, effacer plusieurs fichiers ! rm * : efface tous les fichier du répertoire courant rm –r * : efface tous les fichiers et répertoires rm *.txt : efface tous les fichiers finissant par .txt cp *.c exo1/ : copie tous les fichiers finissant par .c dans le répertoire exo1 mv toto titi exo2/ : déplace les 2 fichiers dans exo2 50 Le caractère spécial * rm –r * efface tous les fichiers et sous-répertoires ! cp fichier1 fichier2! mv fichier1 fichier2! • si fichier2 existe déjà, fichier2 est écrasé par fichier1 ! Ø le contenu de fichier2 est perdu ! Si système pas configuré pour vous donner un avertissement: • réfléchir avant de valider une commande • ajouter l’option –i : une confirmation est alors demandée pour l’effacement ou écrasement de fichiers 51 Le caractère spécial * Effacer le répertoire MP3 Copier les fichiers .mp3 du sous répertoire dans le répertoire courant Effacer les 2 fichiers avec demande de confirmation 52 La commande man : le manuel manuel, aide de linux : man [section] [command/fonction]! ! • la touche ‘ q ’ pour quitter le manuel • sections : 1 - commande utilisateur 3 - fonctions des bibliothèques (du C) man mv ou man 1 mv! man 3 printf (fonction du langage c) 53 La commande man : le manuel man mv! 54 Le shell : résumé • • • • ls : list the current directory ls dir : list the given directory (absolute/relative path) cd dir : change directory cp src dest : copy source file to destination file • • • • • cp –r src dest : copy directory to destination directory mv src dest : move (or rename) source to dest mkdir dir : make new directory rm file : remove file rm –r dir : remove directory • man command : manuel of the command 55 Le shell : résumé • .. : • . : • ~ : alias for the parent directory • * : • *.txt : any series of characters (any filename/dir) alias for the current directory alias for the user’s home directory any filename ending with .txt 56 Le shell : Ergonomie Historique des lignes de commandes : • les ‘flèches haut’ et ‘bas’ pour le rappel et l’exécution d’anciennes commandes Complétion de noms : • frapper le début du nom du fichier/répertoire • appuyer 2 fois sur la touche ‘tabulation’ : • propose les noms de fichiers compatibles avec la frappe ou • complète automatiquement le nom si pas d’ambigüité Interrompre une commande/programme : touche ‘ctrl+c’ 57