C1-linux et intro C

download C1-linux et intro C

of 51

Transcript of C1-linux et intro C

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

[email protected]

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

[email protected]

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:

[email protected]

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:

[email protected]

Linux

systme d'exploitation libre

open source gratuit

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

[email protected]

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

[email protected]

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)

[email protected]

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

[email protected]

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

[email protected]

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:

[email protected]

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

[email protected]

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

[email protected]

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)[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

22

Fichier spcial /dev/null

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

[email protected]

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

[email protected]

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

[email protected]

25

Introduction au C ou comment compiler proprement son premier [email protected]

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)

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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 [email protected]

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'[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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:

[email protected]

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

[email protected]

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

[email protected]

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

[email protected]

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)

[email protected]

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

[email protected]

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