0-TECHNIQUES DE PROGRAMMATION -...

Preview:

Citation preview

0-TECHNIQUES DE PROGRAMMATION

Alias Programmation en C Loïc Cuvillon l.cuvillon@unistra.fr

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)

16

Ce programme C affiche «Goodbye World» à l’écran.

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> void main(void) { int i, j , k ; for (i=0;i>10;i++) { printf("%d\n",i) } }

011001110101011001 001110011001110011 010000111100010101 010010011111000000 111110001000000000 …

Le compilateur

Code source C : •  texte •  ‘‘human readable’’

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)

21

helloworld.c édité avec gedit

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)

23

Compilation et exécution de helloworld dans un terminal sous Linux.

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

29

Android

iOS

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! Folder!

toto!

usr!

Test.txt!

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 $)

33

Identité utilisateur Identité machine (nom ordinateur)

Répertoire courant : ~/Music (où je suis)

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) cd 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 ..!•  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

36

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!

Music!

Born_to_Die!

gotan_project! …!

1

2 3

La commande cd

37

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! ou cd ~

loic!

Music!

Born_to_Die!

gotan_project! …!

1

3

2

La commande ls

38

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

La commande ls

39

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 -al ou –a -l!

•  combinaison de –a et -l

droits sur le fichier, pour le user, group, autres: r (read), w(xrite) , x (execute)

La commande ls

40

nom date de modification

taille du fichier (en octets)

utilisateur propriétaire du fichier

nom du groupe d’utilisateurs propriétaire

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

44

copie du répertoire Music en MP3 (Music et MP3 ont le même contenu)

copie du mp3 sous un autre nom et dans le répertoire courant

copie du répertoire Music dans MP3

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! 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

Idem. si file est un répertoire

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

47

Renommer Music/ (avec ou sans le / à la fin) en Mp3

Déplacer le fichier mp3 dans le répertoire Mp3/Born_to_die/

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 *

52

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

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

•  . : alias for the current directory

•  ~ : alias for the user’s home directory

•  * : any series of characters (any filename/dir)

•  *.txt : 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

Recommended