Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio21:esercitazionib:esercitazione3

Differenze

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

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
informatica:sol:laboratorio21:esercitazionib:esercitazione3 [01/03/2021 alle 09:14 (4 anni fa)] – creata Massimo Torquatiinformatica:sol:laboratorio21:esercitazionib:esercitazione3 [04/03/2021 alle 15:06 (4 anni fa)] (versione attuale) – [Esercizio 5] Alessio Conte
Linea 7: Linea 7:
 ===== Esercizio 2: libtokenizer.so ===== ===== Esercizio 2: libtokenizer.so =====
  
-Rifare l'esercizio creando invece che una libreria statica una libreria dinamica ('libtokenizer.so'). +Come nell'Esercizio però invece che una libreria statica creare una libreria condivisa ('libtokenizer.so'). 
-Verificarne il corretto caricamento in memoria della libreria spostando il file 'libtokenizer.so' in una directory differente da quella corrente (es. ~/mylibdir). Provare ad usare sia l'opzione del linker ''-Wl, rpath,'' che la variabile d'ambiente per il loader ''LD_LIBRARY_PATH''.+Verificarne il corretto caricamento in memoria della libreria spostando il file 'libtokenizer.so' in una directory differente da quella corrente (es. ~/mylibdir). Provare ad usare sia l'opzione del linker ''-Wl, -rpath,'' che la variabile d'ambiente per il dynamic linker/loader ''LD_LIBRARY_PATH''.
  
 ===== Esercizio 3: macro ===== ===== Esercizio 3: macro =====
Linea 17: Linea 17:
 int main() { int main() {
     long *M = malloc(dimN*dimM*sizeof(long));     long *M = malloc(dimN*dimM*sizeof(long));
-    CHECK_PTR(M, "malloc"); +    CHECK_PTR_EXIT(M, "malloc"); 
     for(size_t i=0;i<dimN;++i)     for(size_t i=0;i<dimN;++i)
  for(size_t j=0;j<dimM;++j)   for(size_t j=0;j<dimM;++j)
Linea 23: Linea 23:
          
     PRINTMAT(M, dimN, dimM);     PRINTMAT(M, dimN, dimM);
 +    free(M);
     return 0;     return 0;
 } }
 </code> </code>
-scrivere le 3 macros ''CHECK_PTR'', ''ELEM'' e ''PRINTMAT''.  +scrivere le 3 macros ''CHECK_PTR_EXIT'', ''ELEM'' e ''PRINTMAT''.  
-'CHECK_PTR' prende due argomenti, un puntatore ed una stringa. La macro controlla che il primo argomento sia 'NULL' ed in tal caso stampa utilizzando la funzione di librerie ''perror'' (man 3 'perror') la stringa passata come secondo argomento prima di uscire dal programma con ''EXIT_FAILURE'' (man 3 'exit').  +'CHECK_PTR_EXIT' prende due argomenti, un puntatore ed una stringa. La macro controlla che il primo argomento sia diverso da 'NULL'. Solo se il puntatore è 'NULL' stampa utilizzando la funzione di librerie ''perror'' (man 3 'perror') la stringa passata come secondo argomento prima di uscire dal programma con ''EXIT_FAILURE'' (man 3 'exit').  
-'PRINTMAT' stampa la matrice passata come primo argomento. Al suo interno ''PRINTMAT'' usa la macro ''ELEM'' per accedere agli elementi della matrice. +'PRINTMAT' stampa la matrice passata come primo argomento. Al suo interno ''PRINTMAT'' usa la macro ''ELEM'' per accedere agli elementi della matrice (es. ELEM(M,3,4) equivale ad accedere all'elemento M[3][4] della matrice M -- attenzione però che la matrice è allocata in modo contiguo in memoria e per righe)
  
 Esempio di output richiesto: Esempio di output richiesto:
Linea 49: Linea 50:
  
 Valutare se la funzione somma così come definita è rientrante ed eventualmente fornire una versione rientrante 'somma_r'. Valutare se la funzione somma così come definita è rientrante ed eventualmente fornire una versione rientrante 'somma_r'.
 +
 +===== Esercizio 5 =====
 +Considerare il seguente programma C (prog.c):
 +<code>
 +int main(int argc, char *argv[]) {
 +  int opt;
 +  while ((opt = getopt(argc,argv, ":n:m:h")) != -1) {
 +    switch(opt) {
 +    case 'n':
 +    case 'm':printf("l'argomento di '-%c' e' '%s'\n",opt,optarg); break;
 +    case 'h':printf("'-h' non ha argomenti\n"); break;
 +    case ':':printf("'-%c' richiede un argomento\n", optopt); break;
 +    case '?':printf("'-%c' non e' riconosciuta\n", optopt);
 +    default:;
 +    }
 +  }  
 +  return 0;
 +}
 +</code>
 +Modificare il contenuto del file prog.c **senza aggiungere alcun #include file** e **senza modificare la funzione 'main'**, in modo che il programma possa essere compilato col comando seguente:\\
 +     gcc -Wall -ansi -pedantic prog.c -o prog
 +
informatica/sol/laboratorio21/esercitazionib/esercitazione3.1614590082.txt.gz · Ultima modifica: 01/03/2021 alle 09:14 (4 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki