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:
  1. utilizzare il file di archivio;
  2. compilare utilizzando un Makefile;
  3. analizzare esempi di utilizzo in un programma concreto di

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:
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.