C1-linux et intro C

Post on 18-Jul-2015

35 views 0 download

Transcript of C1-linux et intro C

Cours de C Commandes Linux de base & introduction au C Sbastien Paumier

paumier@univ-mlv.fr

Illustrations provenant du site http://tux.crystalxp.net/

1

Objectif du cours de C

apprendre le langage C analyser un problme pour crire le programme qui le rsout, de faon lgante et modulaire coder proprement savoir respecter un cahier des charges lors de projets tre au niveau pour le cours de systme en IR22

paumier@univ-mlv.fr

Planning

Slot 0: stage de rentre de 3 jours Slot 1:

5 cours, 5 TD sur machine 1 examen 5 cours, 5 TD sur machine 1 examen

Slot 2:

paumier@univ-mlv.fr

3

Objectif du stage de rentre

mise niveau sur:

les commandes systme de base l'criture et la compilation propre d'un programme C simple 2h de cours, 2h de TD, 4h de TP (1 par poste) TP not pour valuation4

3 journes intensives:

dernire journe:

paumier@univ-mlv.fr

Linux

systme d'exploitation libre

open source gratuit

multi-utilisateurs support natif du rseau interface graphique indpendante du systme

paumier@univ-mlv.fr

5

Diffrences principales avec Windows

Pas de C:\... D:\...

racine unique / priphriques vus comme des sousrpertoires. Ex: /mnt/floppy pour A:\ Hello.txt hello.txt HELLO.TXT

Casse des noms de fichiers

Droits d'accs sur les fichiers

paumier@univ-mlv.fr

6

Compte utilisateur

identit = login+mot de passe espace disque priv/home/ens/paumier ou ~paumier

on y est par dfaut quand on se loge

appartenance un ou des groupe(s)

paumier@univ-mlv.fr

7

Lister un rpertoire

commande lscogmu/ plp/ projet.html

option -l pour les dtailstotal 16 drwxr-xr-x drwxr-xr-x -rw-r--r-3 paumier igm 4096 sep 18 2 paumier igm 4096 jui 26 1 paumier igm 4764 nov 20 2006 cogmu/ 2006 plp/ 2006 projet.html

jokers: ls *.html file?.bin

paumier@univ-mlv.fr

8

Fichiers spciaux et cachs. = rpertoire courant .. = rpertoire parent .xxxxx = fichier cach

utiles pour des fichiers de configuration

Fichiers visibles avec ls -a./ ../ .bashrc cogmu/ plp/ projet.html

paumier@univ-mlv.fr

9

Rpertoires

pwd affiche le rpertoire courant on change de rpertoire avec cd

relatif:

cd toto cd .. cd ../W3/prog cd /tmp/test cd ou cd ~ ou cd ~paumier10

absolu:

retour la racine du compte:

paumier@univ-mlv.fr

Rpertoires

crer un rpertoiremkdir toto

dtruire un rpertoirermdir toto si toto est vide rm -ri toto sinon rm -rf toto pour viter de confirmer pour chaque fichier

rm marche aussi pour les fichiers11

paumier@univ-mlv.fr

Copie et renommage

copie de fichier:cp toto ../titi

copie de rpertoire:cp -r toto/ tutu

renommage ou dplacement:mv toto tutu mv toto ../../test/toto.txt

paumier@univ-mlv.fr

12

Droits d'accs-rwxrw-r-1 paumier igm rwx rw0 jun 22 11:02 toto r--

- = fichier d = rpertoire (directory) Droits du possesseur du fichier (paumier)paumier@univ-mlv.fr

Droits de tous les autres utilisateurs Droits du groupe igm

13

Droits d'accsrpertoire R on peut voir le contenu r on peut lire F de R on peut crer des fichiers w on peut crire dans F ou des rpertoires ou le dtruire dans R on peut rentrer dans R x on peut excuter F si F est un excutable avec cdPour pouvoir crer un fichier titi/tutu, on doit avoir les droits w et x sur titi

fichier F

paumier@univ-mlv.fr

14

Changer les droits

chmod u=wx toto : fixe wx les droits de l'utilisateur (user) pour le fichier toto, et laisse les autres inchangs:

avant: -rw-r--r-aprs: --wxr--r--

g modifie les droits du groupe o modifie ceux des autres (others) a modifie tous les droits (all)15

paumier@univ-mlv.fr

Changer les droits

+ ajoute les droits indiquschmod a+x toto

avant: -rw-r--r-aprs: -rwxr-xr-x

- enlve les droits indiquschmod g-r,o-r toto

avant: -rw-r--r-aprs: -rw------16

paumier@univ-mlv.fr

Lancer une tche de fond

anjuta dans un terminal lance un diteur, mais la console n'a plus la main pour garder la main:$>anjuta& [1] 2715

lance un autre processus

paumier@univ-mlv.fr

17

Voir les processus en cours

ps : affiche les processus du terminal courantPID TTY TIME CMD 00:00:00 bash 00:00:00 emacs 00:00:00 ps 1962 pts5 3517 pts5 3518 pts5

ps -u paumier : affiche tous les processus de l'utilisateur paumier18

paumier@univ-mlv.fr

Tuer un programme

ctrl+c : tue le programme ctrl+z : stoppe le programme

on pourra y revenir avec fg

kill -3 PID : tue le programme kill -9 PID : tue le programme sauvagement (dernier recours) xkill : permet de slectionner une fentre19

paumier@univ-mlv.fr

Afficher un fichier

cat toto: affiche le contenu de toto more toto: idem, avec dfilement si toto ne tient pas sur l'cran less toto: mieux que more (on peut remonter) head -n 17 toto: affiche les 17 premires lignes de toto tail -n 17 toto : affiche les 17 dernires lignes de toto20

paumier@univ-mlv.fr

Rediriger les sorties

ls > toto : redirige la sortie standard de ls dans le fichier toto ls >> toto : idem, mais ajoute les donnes la fin de toto ls 2> toto : redirige la sortie d'erreur dans le fichier toto ls 2>> toto : idem, avec ajout en fin

paumier@univ-mlv.fr

21

Rediriger les sorties>$ ls -l total 8 d---------rw-r--r--

2 paumier igm 4096 jun 22 17:13 titi/ 1 paumier igm 11 jun 22 17:13 tutu

>$ ls * > list 2> err >$ cat list tutu >$ cat err ls: titi: Permission denied

paumier@univ-mlv.fr

22

Fichier spcial /dev/null

trou noir si on veut ne voir que les sorties d'erreur de ls:ls > /dev/null

paumier@univ-mlv.fr

23

Chercher dans des fichiers

grep xxx *.txt : affiche toutes les lignes des fichiers *.txt qui contiennent xxx

>$ grep passwd ind* index:chpasswd (8) - update password file in batch index2:passwd [ssl-passwd] (1) - compute password hashes ind:rpc.yppasswdd [rpc] (8) - NIS password update daemon

paumier@univ-mlv.fr

24

Obtenir de l'aide

man xxx : donne la page de manuel de la commande xxx man -k xxx : donne les pages de manuel dont le titre contient xxx xxx --help : convention pour toutes les commandes du systme

paumier@univ-mlv.fr

25

Introduction au C ou comment compiler proprement son premier programmepaumier@univ-mlv.fr

26

Le langage C

C, parce qu'aprs le langage B :) 1972, Laboratoires Bell, Dennis Ritchie & Kenneth Thompson 1989: norme ANSI C langage impratif la fois haut et bas niveau programmation systme (noyau Linux)

paumier@univ-mlv.fr

27

Quelques rfrences

B.W.Kernighan D.M.Ritchie, Le langage C http://fr.wikibooks.org/wiki/Programmation_C

+ tous les livres qui prennent la poussire labibliothque...

rendu: charte des projets

http://igm.univ-mlv.fr/~paumier/charte_des_projets.html

paumier@univ-mlv.fr

28

Qu'est-ce qu'un programme?Instructions dans un langage lisible par un humain Fichiers objets

} } }

.c

.c

Compilation.o .o libs

dition de liens Programme excutable

paumier@univ-mlv.fr

29

Les fichiers sources

fichiers textes contenant les instructions extension spciale .c syntaxe trs prcise respecter sparateurs=espace+tab+retour la ligne programmation modulaire: un fichier par thme:

bibliothque mathmatique, graphique, ...30

paumier@univ-mlv.fr

Le premier programmeDes commentaires/* HelloWorld.c * Le classique des classiques */ #include int main(int argc,char* argv[]) { printf("Hello world!\n"); return 0; }

Inclusion de la bibliothque contenant la fonction printf

paumier@univ-mlv.fr

31

Le premier programmemain est toujours la fonction principale d'un programme C

/* HelloWorld.c * Le classique des classiques */

Retourne un entier

#include int main(int argc,char* argv[]) { printf("Hello world!\n"); return 0; }

argc : nombre de paramtres argv : les paramtrespaumier@univ-mlv.fr

32

Le premier programmeDbut de bloc d'instructions

La fonction se termine et renvoie 0

/* HelloWorld.c * Le classique des classiques */ #include int main(int argc,char* argv[]) { printf("Hello world!\n"); return 0; }

Fin de bloc d'instructionspaumier@univ-mlv.fr

Fonction affichant l'cran une chane de caractres

33

Le premier programme

compilation:$>gcc HelloWorld.c -c $>gcc HelloWorld.o -o HelloWorld ou, en une tape: $>gcc HelloWorld.c -o HelloWorld

excution:$>./HelloWorld Hello world!34

paumier@univ-mlv.fr

Un autre exempleConstante#include #define PI 3.14 float a,b; float sum(float x,float y) { return x+y; } int main(int argc,char* argv[]) { float c,d; a=PI; b=1; c=sum(a,b); printf("%f + %f = %f\n",a,b,c); printf("d=%f\n",d); return 0; }

Variables globales Une fonction

Le C permet l'utilisation de variables non initialises !!!35

paumier@univ-mlv.fr

Le mme en deux fichiersf1.c#include #define PI 3.14 float a,b; extern float sum(float x,float y); int main(int argc,char* argv[]) { float c,d; a=PI; b=1; c=sum(a,b); printf("%f + %f = %f\n",a,b,c); printf("d=%f\n",d); return 0; }

f2.cfloat sum(float x,float y) { return x+y; }

Dclaration d'une fonction dfinie dans un autre fichier

paumier@univ-mlv.fr

36

Le mme en trois fichiersf1.c#include #include "f2.h" #define PI 3.14 float a,b; int main(int argc,char* argv[]) { float c,d; a=PI; b=1; c=sum(a,b); printf("%f + %f = %f\n",a,b,c); printf("d=%f\n",d); return 0; }

f2.cfloat sum(float x,float y) { return x+y; }

f2.hfloat sum(float x,float y);

Inclusion du fichier header qui contient la dfinition de sum37

paumier@univ-mlv.fr

Sources et headers

.c: code

on n'inclut pas les .c ! dfinitions des fonctions visibles de l'extrieur du .c dfinitions de constantes description de la bibliothque licence du code

.h:

paumier@univ-mlv.fr

38

Fichiers .h

ne doivent pas tre compils avec gcc problme de doubles dfinitions protection avec des macrosf2.h#ifndef f2_H #define f2_H float sum(float x,float y); #endif

paumier@univ-mlv.fr

39

Un beau .h/* * Copyright (C) 2007 Sbastien Paumier * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * ... * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * */ #ifndef ANGLES_H_ #define ANGLES_H_ /** * This library provides implementations of trigonometric functions. */ #define PI 3.14 float cosinus(float angle); float sinus(float angle); #endif

USA.

Inutile de commenter les choses videntes

paumier@univ-mlv.fr

40

Options de compilation

-ansi : norme qui garantie la portabilit -Wall : affiche des avertissementswarnings.cmain(int argc,char* argv[]) { int a,b; printf("a=%d\n",a); }

$>gcc warnings.c $>gcc warnings.c -Wall -ansi Warnings.c:1: AVERTISSEMENT: Warnings.c: Dans la fonction Warnings.c:3: AVERTISSEMENT: Warnings.c:2: AVERTISSEMENT: Warnings.c:4: AVERTISSEMENT: fonction

(se mfier des traductions trs mauvaises)

le dfaut choisi du type retourn est int main : dclaration implicite de la fonction printf variable inutilise b contrle a atteint la fin non void de la

paumier@univ-mlv.fr

41

Messages d'erreurs

Possibilit d'erreurs en cascade

toujours commencer par la premire erreurcascade.cint sum(int anint b) { return a+b; }

$>gcc -Wall -ansi cascade.c cascade.c:1: erreur d'analyse syntaxique avant b cascade.c: Dans la fonction sum : cascade.c:2: a non dclar (premire utilisation dans cette fonction) cascade.c:2: (Chaque identificateur non dclar est rapport une seule fois cascade.c:2: pour chaque fonction dans laquelle il apparat.) cascade.c:2: b non dclar (premire utilisation dans cette fonction)

paumier@univ-mlv.fr

42

Les fichiers Makefile

instructions pour faciliter la compilation utilisables avec make nom = Makefile ou makefileall: trigo trigo: main.o angles.o gcc main.o angles.o -o trigo @echo Compilation finie. clean: rm -f trigo main.o angles.o %.o: %.c gcc -c -Wall -ansi $ make make: Rien faire pour all .45

paumier@univ-mlv.fr

Propret du code1) indent proprement (utiliser indent si ncessaire)int { foo( void) int foo(void) { int i,j=0,u; for (i=0;i