Sessió 1 curs programació linux
El material del curs el trobaràs al Campus Virtual Atenea, on hi pots accedir-hi per aquest enllaç:
http://atenea.upc.edu/moodle/course/view.php?id=16197 com a visitant i després has d'escriure la clau d'inscripció: 90072007-CB i clicar a "Inscriu-me en aquest curs" i ja hauràs entrat al curs.
Sessió 1. 11-4-2008
login: cursice/ice
Josep Vilaplana
Lluis Pérez Vidal
Sergi Tur
The Art of Unix Programming
Eric S. Raymond
també autor de:
"La catedral y el bazar"
http://es.wikipedia.org/wiki/Eric_S._Raymond
Codi Hamming
http://es.wikipedia.org/wiki/C%C3%B3digo_Hamming
ofuscació de codi:
http://es.wikipedia.org/wiki/Ofuscaci%C3%B3n
Prescripció de Postel:
http://onlinedictionary.datasegment.com/word/postel's%20prescription
KISS Principle
http://en.wikipedia.org/wiki/KISS_principle
Calculadora de consola:
cursice@ali15:~$ bc -> molt més ràpid que la calculadora gràfica
Joc de Rogue: joc gràfic però amb interfície textual:
http://es.wikipedia.org/wiki/Rogue
gimp millor que Adobe Photoshop?
Eina automàtica per convertir una pàgina textual a html: http://docutil.sourceforge.net
A Ubuntu, per defecte no s'instal.la les llibreries bàsiques, com per exemple stdio.h, que s'haurien de trobar a /usr/include
S'ha d'instal.lar el paquet libc6-dev
i ja es soluciona el problem:
$ sudo apt-get install libc6-dev
$ whereis stdio.h
Pràctica: http://www.lsi.upc.edu/~inf/laboratori/index.html#sessions
ens baixem els fitxers de la sessió 8 i 9
descomprimim el fitxer compsep.tgz:
tar zxvf compsep.tgz
Recordar d'apretar TAB per completar el nom del fitxer **************
Anem a sumar dos números racionals
natural.h -> coses que es poden fer amb els números naturals
racional.h -> coses que es poden fer amb els números racionals
fc.h -> fracció canònica
Eina make (important). Repàs
man make -> make - GNU make utility to maintain groups of programs
make [ -f makefile ] [ options ] ... [ targets ] ...
gcc: compilador i muntador
gcc -c -> compilador. compila el font pe aconseguir l'objecte
gcc -c -g -> debugging. en el fitxer objecte queda inclosa la informació de warnings i errors
gcc -c -g -ansi -> que sigui estàndard d'ANSI
gcc -c -g -ansi -Wstrict-prototypes -Wmissing-prototypes -Wall -> la W és de warnings
Objectiu: la compilació ha de ser sense warnings
gcc -c -g -ansi -Wstrict-prototypes -Wmissing-prototypes -Wall seqrac.c -> obtenim seqrac.o
Per cada fitxer .c hauríem d'obtenir el .o (objecte), i quan els tinguem tots fer el muntatge.
makefile és per fer tot el procés de cop
emacs Makefile &
el & és per continuar el procés en paral.lel
seqrac és el nom de la regla i també el nom del fitxer.
seqrac necessita tots els fitxer objecte: natural.o, racional.o, fc.o i seqrac.o
hem de posar tabuladors (molt de compte!!)
gcc -o seqrac -> el nom de l'executable serà seqrac
truco: per fer copiar i enganxar, seleccionar el que vols copiar, ficar el cursor allà on ho vols copiar, i amb el botó del mig del ratolí es copia
comentaris amb coininet
i edito el fitxer (de moment es fiquen les dependències manualment):
seqrac: seqrac.o racional.o natural.o fc.o
gcc -o seqrac seqrac.o racional.o natural.o fc.o
seqrac.o: seqrac.c rational.h
gcc -c -g -ansi -Wstrict-prototypes -Wmissing-prototypes -Wall seqrac.c
rational.o: rational.c rational.h natural.h
gcc -c -g -ansi -Wstrict-prototypes -Wmissing-prototypes -Wall rational.c
natural.o: natural.c natural.h
gcc -c -g -ansi -Wstrict-prototypes -Wmissing-prototypes -Wall natural.c
fc.o: fc.c fc.h natural.h rational.h
gcc -c -g -ansi -Wstrict-prototypes -Wmissing-prototypes -Wall fc.c
cursice@ali15:~/Desktop/compsep$ make seqrac
-> obtenim seqrac.o, i fa bé les dependències. Actualitza les dependències en el cas de què s'hagi fet canvis.
make crida a Makefile
Fem-ho més fàcil.
Fiquem variables:
OBJECTES=seqrac.o racional.o natural.o fc.o
CFLAGS=-g -ansi -Wstrict-prototypes -Wmissing-prototypes -Wall
seqrac: $(OBJECTES)
gcc -o seqrac $(OBJECTES)
seqrac.o: seqrac.c rational.h
gcc -c $(CFLAGS) seqrac.c
rational.o: rational.c rational.h natural.h
gcc -c $(CFLAGS) rational.c
natural.o: natural.c natural.h
gcc -c $(CFLAGS) natural.c
fc.o: fc.c fc.h natural.h rational.h
gcc -c $(CFLAGS) fc.c
M'interessa una regla que eviti escriure tots els fitxers necessaris. Esborrem tots els fitxers objecte finals
OBJECTES=seqrac.o racional.o natural.o fc.o
CFLAGS=-g -ansi -Wstrict-prototypes -Wmissing-prototypes -Wall
seqrac: $(OBJECTES)
gcc -o seqrac $(OBJECTES)
seqrac.o: seqrac.c rational.h
gcc -c $(CFLAGS) seqrac.c
rational.o: rational.c rational.h natural.h
gcc -c $(CFLAGS) rational.c
natural.o: natural.c natural.h
gcc -c $(CFLAGS) natural.c
fc.o: fc.c fc.h natural.h rational.h
gcc -c $(CFLAGS) fc.c
.PHONY esborra esborraTot
esborra:
rm -f $(OBJECTES) *~
esborraTot:
rm -f $(OBJECTES) *~ seqrac