Laboratorio di Programmazione 2
proff. A. Andreazza, E. Spoletini
Universita' degli Studi di Milano
Anno Accademico 2000/2001
Lezione 1
Introduzione
Scopo della prima sessione di laboratorio e' impratichirsi con i comandi
necessari per la compilazione e lo sviluppo di programmi in ambiente Linux.
Durante questa sessione dopo aver effettuato il download di un file di archivio compresso Lezione1.tar.gz,
si procedera' a:
- utilizzare il file di archivio;
- compilare utilizzando un Makefile;
- analizzare esempi di utilizzo in un programma
concreto di
- input/output
- strutture di controllo
(if, for,while,switch)
- utilizzo di include files
- passaggio di argomenti attraverso la linea di comando
- operazioni con variabili char
L'esercizio
Il file di archivio contiene un piccolo programma per crittografare un
file di testo con un algoritmo estremamente semplice.
Nei file dell'archivio sono stati inseriti vari errori. La prima parte
del lavoro consiste nel portare a termine la compilazione, correggendo
tutti gli errori di sintassi. Questa operazione dara' l'opportunita' di
leggere il codice e di capire come funziona il programma.
Una volta compilato il programma, tutte le sue funzionalita' dovranno
essere controllate. Cio' permettera' di mettere in evidenza errori di logica
nella programmazione e di modificare il programma in modo che soddisfi
alle specifiche.
Utilizzo di file di archivio
In ambiente UNIX, la procedura standard per distribuire pacchetti di file
(per esempio i sorgenti di programmi) e' di utilizzare file di archivio
gestiti tramite il comando tar.
Per ridurre le dimensioni dei file di archivio, lo strumento piu' utilizzato
e' il programma di compressione gzip, che si utilizza nel modo
seguente:
gzip NomeFile per
comprimere un file
gunzip NomeFile per decomprimere
un file.
Per completezza, sono allegati le pagine del man di tar
e gzip.
Passo 1: decomprimere e estrarre tutti i file dell'esercizio da Lezione1.tar.gz
Compilazione mediante make
Il comando
make
puo' essere utilizzato per gestire la compilazione di un programma, cosa
tanto piu' utile in quanto in C e' d'uso separare le componenti di un programma
in file diversi che possono venire compilati (ed eventualmente riutilizzati)
separatamente. L'utilizzo di tale comando verra' discusso piu' in dettaglio
verso la fine del corso, quindi qui saranno ricordate solo le funzioni
necessarie per compilare il programma di esempio. Il comando make
legge un file di configurazione Makefile
dove sono immagazzinate le informazioni necessarie per la compilazione.
La figura mostra un esempio di Makefile:
Per compilare
qualcosa e' sufficiente dare il comando:
make NomeTarget
e make
si preoccupera' di stabilire quali file e' necessario compilare per costruire
il target.
Il compilatore
C in ambiente Linux e' gcc,
le man pages sono allegate.
Passo 2: leggere le istruzioni per la compilazione nel file README
e compilare il programma di esempio.
Ci saranno ad ogni passo un sacco di errori, sia nel Makefile
che nel codice del programma. Il compilatore dara' anche dei messaggi di
warning: cercate di capire cosa vogliono dire e prendete i provvedimenti
opportuni.
Cogliete l'occasione per vedere come e' strutturato il codice. Un esempio
particolarmente utile e' vedere il sistema con cui vengono passate al programma
opzioni da linea di comando (tramite le variabili argc e argv[])
Se avete dei dubbi su come funzionano le routine delle Standard Libraries,
potete avere dell'aiuto on-line digitando:
man NomeRoutine
Test del programma
Una volta riusciti a compilare il programma senza errori, procedete a verificare
che tutte le funzionalita' descritte nel file README funzionino correttamente.
Passo 3: provate a criptare e decriptare dei testi, usando sia file che
standard input ed output
Come consiglio, per confrontare due file potete usare il comando:
diff File1 File2.
Cercate di capire cos'e' che non funziona e come correggerlo.
Relazione
La relazione consistera' nel riempimento di un semplice
formulario
con domande relative allo svolgimento degli esercizi.