Download - C1-linux et intro C
Cours de C Commandes Linux de base & introduction au C Sbastien Paumier
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
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:
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:
Linux
systme d'exploitation libre
open source gratuit
multi-utilisateurs support natif du rseau interface graphique indpendante du systme
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
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)
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
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
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:
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
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
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
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
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
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
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
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
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
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
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
22
Fichier spcial /dev/null
trou noir si on veut ne voir que les sorties d'erreur de ls:ls > /dev/null
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
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
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)
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
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
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
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
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
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
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
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
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:
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
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
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
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)
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
Propret du code1) indent proprement (utiliser indent si ncessaire)int { foo( void) int foo(void) { int i,j=0,u; for (i=0;i