Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio16:esercitazionib:esercitazione2

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
informatica:sol:laboratorio16:esercitazionib:esercitazione2 [25/02/2016 alle 11:51 (9 anni fa)] – [Esercizio 5: Generazione numeri casuali con ''rand_r()''] Susanna Pelagattiinformatica:sol:laboratorio16:esercitazionib:esercitazione2 [03/03/2016 alle 08:23 (9 anni fa)] (versione attuale) – [Esercizio 1: preprocessing, compilazione e linking] Susanna Pelagatti
Linea 2: Linea 2:
  
  
-Dove si sperimenta qualche tool e si approfondiscono alcune caratteristiche del C sequenziale: errno, perror ...+Dove si sperimenta qualche tool e si approfondiscono alcune caratteristiche del C sequenziale: errno, perror creazione di librerie e generazione di numeri casuali
  
  
-===== Esercizio 1: preprocessing, compilazione e linking =====+===== Esercizio 1: Preprocessing, compilazione e linking =====
 Seguire l'esempio dei lucidi visti nella lezione di proprocessing, compilazione e linking verificando i vari passi utilizzando il programma esempio presentato ed i comandi descritti nei  {{:informatica:sol:laboratorio15:esercitazionib:c006prepcomplinkong.pdf|lucidi presentati a lezione}} Seguire l'esempio dei lucidi visti nella lezione di proprocessing, compilazione e linking verificando i vari passi utilizzando il programma esempio presentato ed i comandi descritti nei  {{:informatica:sol:laboratorio15:esercitazionib:c006prepcomplinkong.pdf|lucidi presentati a lezione}}
  
-===== Esercizio 2: verificare gli accessi in memoria: valgrind =====+===== Esercizio 2: Creare ed usare una libreria di liste =====
  
-Verificare la correttezza degli accessi ai puntatori compiuti dalle funzioni su liste di interi della libreria libList.a utilizzando ''valgrind'' +Realizzare una libreria che fornisce le operazioni su liste implementate negli esercizi 2 e 3 dell'[[informatica:sol:laboratorio16:esercitazionib:esercitazione1|esercitazione 1.]] 
-Questo strumento permette fra l'altro di capire se tutte le variabili sono inizializzate prima del loro uso, se accediamo memoria giadeallocata o mai allocata e situazioni similari+  
 +In C tipicamente per realizzare una libreria si difinisce un file ''.h'' con i prototipi ed i tipi messi a disposizione dalla libreria e si fornisce il codice pre-compilato in un opportuno file di libreria ''.a''.
  
 +Nel nostro caso l'header si chiamera' ''lista.h'' e la libreria si chiamera' ''libList.a''.
  
-Per fare questo procedere come segue:   +Procedere nel modo seguente: 
-  * compilare il file da verificare con opzione ''-g'' per includere le informazioni di debuggingAd esempio se il mio file si chiama ''main.c'' posso compilare con+ 
 +  * Definire un file ''lista.h'' che contiene i tipi ed i prototipi delle funzioni implementate  
 +  * Definire un file ''lista.c'' che contiene il codice che implementa le funzioni. 
 +  * Generare il modulo oggetto ''lista.o'' da inserire nella libreria con il comando ''gcc'' come segue
 <code> <code>
-bash$ gcc -Wall -pedantic -g -o prova main.c+$ gcc -Wall -pedantic -c lista.c
 </code> </code>
-  * eseguire+  * Creare la libreria con i lcomando ''ar'' come segue
 <code> <code>
-bashvalgrind ./prova+ar -r libList.a lista.o
 </code> </code>
-in questo modo, schermo verranno riportare le infrazioni rilevateAd esempio, //invalid read// o //invalid write// sono accessi in lettura o scrittura a memoria non allocata o giadeallocata.+ 
 +Quando la creazione e' andata buon fine creare un file ''main.c'' che contenga uno dei main di test sviluppati negli esercizi precedenti e compilarlo utilizzando la libreria. In particolare : 
 +  * il main di test dovra' includere il file ''lista.h'' 
 +  * in fase di compilazione utilizzare la libreria sviluppata con 
 +<code> 
 +$ gcc -Wall -pedantic main.c -lList -L. 
 +</code> 
 +dove l'opzione ''-l'' indica il nome della libreria da usare in fase di linking e l'opzione ''-L'' specifica la directory dove cercarla (oltre alle directory standard tipo ''/usr/lib''). 
 +. 
  
 ===== Esercizio 3: Manipolare ''errno'' e uso di ''perror()'' ===== ===== Esercizio 3: Manipolare ''errno'' e uso di ''perror()'' =====
Linea 50: Linea 64:
 Ripetere l'esecizio 4 utilizzando la funzione ''rand_r()''. A che serve questa funzione ? Quali sono le principali differenze ? (//Suggerimento//: partire dall'analisi accurata del ''man'') Ripetere l'esecizio 4 utilizzando la funzione ''rand_r()''. A che serve questa funzione ? Quali sono le principali differenze ? (//Suggerimento//: partire dall'analisi accurata del ''man'')
  
-===== Esercizio 6: Libreria di liste =====+===== Esercizio 6: Verificare gli accessi in memoria: valgrind =====
  
-Realizzare una libreria che fornisce le operazioni su liste implementate negli esercizi 2 e 3 dell'[[informatica:sol:laboratorio16:esercitazionib:esercitazione1|esercitazione 1.]] +Verificare la correttezza degli accessi ai puntatori compiuti dalle funzioni su liste di interi della libreria libList.a utilizzando ''valgrind'' 
-  +Questo strumento permette fra l'altro di capire se tutte le variabili sono inizializzate prima del loro uso, se accediamo memoria giadeallocata o mai allocata e situazioni similari
-In C tipicamente per realizzare una libreria si difinisce un file ''.h'' con i prototipi ed i tipi messi a disposizione dalla libreria e si fornisce il codice pre-compilato in un opportuno file di libreria ''.a''.+
  
-Nel nostro caso l'header si chiamera' ''lista.h'' e la libreria si chiamera' ''libList.a''. 
  
-Procedere nel modo seguente: +Per fare questo procedere come segue:   
- +  * compilare il file da verificare con opzione ''-g'' per includere le informazioni di debuggingAd esempio se il mio file si chiama ''main.c'' posso compilare con
-  * Definire un file ''lista.h'' che contiene i tipi ed i prototipi delle funzioni implementate  +
-  * Definire un file ''lista.c'' che contiene il codice che implementa le funzioni. +
-  * Generare il modulo oggetto ''lista.o'' da inserire nella libreria con il comando ''gcc'' come segue+
 <code> <code>
-$ gcc -Wall -pedantic -c lista.c+bash$ gcc -Wall -pedantic -g -o prova main.c
 </code> </code>
-  * Creare la libreria con i lcomando ''ar'' come segue+  * eseguire
 <code> <code>
-ar -r libList.a lista.o+bashvalgrind ./prova
 </code> </code>
- +in questo modo, schermo verranno riportare le infrazioni rilevateAd esempio, //invalid read// o //invalid write// sono accessi in lettura o scrittura a memoria non allocata o giadeallocata.
-Quando la creazione e' andata buon fine creare un file ''main.c'' che contenga uno dei main di test sviluppati negli esercizi precedenti e compilarlo utilizzando la libreria. In particolare : +
-  * il main di test dovra' includere il file ''lista.h'' +
-  * in fase di compilazione utilizzare la libreria sviluppata con +
-<code> +
-$ gcc -Wall -pedantic main.c -lList -L. +
-</code> +
-dove l'opzione ''-l'' indica il nome della libreria da usare in fase di linking e l'opzione ''-L'' specifica la directory dove cercarla (oltre alle directory standard tipo ''/usr/lib''). +
-.+
  
  
informatica/sol/laboratorio16/esercitazionib/esercitazione2.1456401062.txt.gz · Ultima modifica: 25/02/2016 alle 11:51 (9 anni fa) da Susanna Pelagatti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki