Introduzione a Linux: differenze con windows e strumenti per la programmazione

401 views

Published on

Introduction to Linux, gcc & gdb (in Italian).

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
401
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introduzione a Linux: differenze con windows e strumenti per la programmazione

  1. 1. www.torlug.org www.cs.uniroma2.it Corso di Laboratorio di Programmazione dei calcolatori 2007 Introduzione a Linux Differenze con Windows e strumenti per la programmazione valerio.bruno@torlug.orgDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  2. 2. www.torlug.org www.cs.uniroma2.it Cosè Linux ? ● Il cuore di un sistema operativo (Linux Kernel) – Sviluppato inizialmente da Linus Torvalds, oggi da una comunità di persone che lavorano delocalizzate. – Software Libero! ● Distribuzione GNU-Linux (Linux Distro): un sistema operativo completo (Kernel + Compilatore + Applicazioni) – TANTI sistemi operativi Linux ( http://distrowatch.com/ ).Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  3. 3. www.torlug.org www.cs.uniroma2.it Distro Linux: Pro ● Software Libero ! – Modificabile – In rapida evoluzione – Gratuito ● Sicuro e stabile – Virus? Quali virus? – Esecuzione esplicita di programmi = Eliminazione necessità firewall.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  4. 4. www.torlug.org www.cs.uniroma2.it Distro Linux: Pro ● Vasta comunità di utenti – Forum e LUG di supporto. – Nuovi amici ● Grande varietà di software.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  5. 5. www.torlug.org www.cs.uniroma2.it Distro Linux: Contro ● Mancanza del supporto hardware. ● Integrazione funzionalità desktop sufficiente ma ancora da migliorare. ● Milioni di programmi, centinaia di distro: che fatica lintegrazione! (per fortuna ci sono i gestori di pacchetti che risolvono le dipendenze) ● Mancanza di supporto sui normali canali commerciali.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  6. 6. www.torlug.org www.cs.uniroma2.it Distro Linux: Quale ? http://reallylinux.com/docs/choosinglinux.shtml http://www.ubuntulinux.com http://www.opensuse.org/Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  7. 7. www.torlug.org www.cs.uniroma2.it Il filesystem di LinuxDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  8. 8. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Differenze con Windows ● In Linux i file sono ordinati in una unica gerarchia di cartelle. ● I percorsi si indicano con il front-slash / e non con il back-slash .Ad esempio i file dellutente pippo si trovano in: /home/pippo/invece che in “c:Documents and Settingspippo”Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  9. 9. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Descrizione generale delle cartelle ● /boot : contiene i file necessari allavvio del sistema. ● /sbin : contiene i programmi per lamministrazione del sistema (es: configurazione hardware). ● /bin: contiene programmi di utilità. ● /lib: contiene le librerie utilizzabili dai vostri programmi. ● /etc : contiene i file di configurazione del sistema. ● /home : contiene i file personali degli utenti.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  10. 10. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Descrizione generale delle cartelle 2 ● /root : la home dellutente root. ● /mnt : contiene i mount point per altre periferiche di memoria di massa. ● /lost+found : file recuperati da blocchi di sistema ● /dev : contiene file che rappresentano periferiche hardware. ● /proc : contiene file che rappresentano processi.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  11. 11. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Descrizione generale delle cartelle 3 ● /opt : contiene programmi non previsti dal sistema di base. ● /var : contiene file variabili (log di sistema, archivi di progetto, .... ). ● /tmp : contiene file temporanei. ● /usr : contiene file e programmi degli utenti condivisi tra gli utenti.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  12. 12. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Differenze con Windows 2 ● Linux è case sensitive !!! (come il C) ● Le applicazioni sono “sparse” per il filesystem. Dal momento che non esistono i drive (A per il floppy , C per il disco fisso, D per il cdrom, ....), come accedo ad i file sul mio floppy disk o sulla mia penna usb ?Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  13. 13. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Differenze con Windows 3 ● Per accedere ad i file su un dispositivo esterno (floppy disk, penna usb, ecc..) devo prima fare (o il sistema, dopo aver rilevato la periferica, esegue) il mount del dispositivo. ● I file “appariranno come per magia” in una sotto cartella del filesystem. ● Quando ho finito con i file, prima di scollegare il dispositivo DEVO fare lunmount del dispositivo.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  14. 14. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Gli utenti, i gruppi ed i loro file ● Linux è un sistema multi-utente; ● Un utente è identificato da una coppia username e password; ● Ciò che un utente può fare o non può fare è definito da i suoi permessi sui file. ● root è il super utente: può fare tutto su tutti.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  15. 15. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Gli utenti, i gruppi ed i loro file 2 ● In Linux sono inoltre definiti i gruppi di utenti. ● Un utente appartiene almeno ad un gruppo; ● E possibile impostare dei permessi specifici ad un gruppo, senza dover impostare tali permessi ad ogni utente di quel gruppo.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  16. 16. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Gli utenti, i gruppi ed i loro file 3 ● Ad ogni file sono associati: – lutente proprietario del file ed i permessi che questultimo ha sul file stesso. – un gruppo di utenti (generalmente il gruppo principale del proprietario) ed i permessi che gli utenti di questo gruppo hanno sul file stesso – i permessi concessi a tutti coloro che non sono il proprietario e non appartengono al gruppo associato.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  17. 17. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Gli utenti, i gruppi ed i loro file 4 ● i permessi corrispondono a 3 bit: uno per la lettura, uno per la scrittura ed uno per lesecuzione.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  18. 18. www.torlug.org www.cs.uniroma2.it Utilizzare Linux da shell Introduzione ● Una shell è un interprete di comandi. ● Lavora in modalità interattiva ma anche batch. ● Esistono tante shell: tcsh, csh, sh, ksh, perchè proprio bash? ● Maggiori informazioni sulla bash le trovate su http://www.gnu.org/software/bashDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  19. 19. www.torlug.org www.cs.uniroma2.it Utilizzare Linux da shell Introduzione 2 ● Perchè utilizzare la shell quando esistono tante belle interfacce grafiche? – Per alcune cose utilizzare la shell è più veloce. – Linterfaccia grafica potrebbe non essere presente sulla macchina che stiamo usando (eg. server). – Potrebbe essere lunico modo per accedere ad una funzionalità.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  20. 20. www.torlug.org www.cs.uniroma2.it Utilizzare Linux da shell Primo incontro con il mostro ● Si accede alla shell – quando ci si logga in modalità testuale – tramite il programma Konsole di KDE – tramite il programma Terminale di Gnome – ... tramite un qualche programma di un qualche window manager – collegandosi da remoto alla macchinaDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  21. 21. www.torlug.org www.cs.uniroma2.it Utilizzare Linux da shell Primo incontro con il mostro 2 ● Si presenta come un prompt nomeUtente@nomeComputer percorsoCartellaSelezionata $ ● Il carattere ~ (tilde) indica la home folder dellutente. ...ed è lì, immobile, che attende i vostri comandi...Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  22. 22. www.torlug.org www.cs.uniroma2.it Utilizzare Linux da shell Convenzioni per i comandi ● Quando si inserisce un comando questo può avere parametri ed opzioni; in generale: – le opzioni vanno prima dei parametri; – le opzioni sono precedute dal meno – o dal doppio meno -- ; – quasi tutti i comandi hanno lopzione –help che fa stampare una breve guida del comando. ● es: ls --helpDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  23. 23. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Navigare il filesystem● Con il comando cd è possibile spostarsi tra le cartelle – utilizzando un path (relativo o assouluto) come parametro, la shell ci porta alla cartella puntata dal path. – senza parametri ci fa ritornare nella home; – utilizzando i .. come parametro saliamo la gerarchia di un livello;Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  24. 24. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Visualizzare i file ● Con il comando ls è possibile esaminare il contenuto di una cartella; alcune opzioni interessanti: – -a mostra i file nascosti; – -l mostra i file in ununica colonna con i loro permessi, gli utenti ed i gruppi associati, la loro dimensione in byte, lultima data di modifica; – -h mostra la dimensione dei file nellordine di grandezza più comodo per la lettura da essere umano; questa opzione deve essere usata insieme allopzione l.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  25. 25. www.torlug.org www.cs.uniroma2.itDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  26. 26. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Gestione dei file● rm <nomeFile> – Cancella un file● rm -r <nomeCartella> – Cancella una cartella e tutte le sottocartelle● mv <nomeFile> <nuovoPath> – Sposta un file nel nuova cartellaDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  27. 27. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Gestione dei file 2● nano <nomeFile> oppure pico <nomeFile> – Crea/modifica un file● mv <nomeFile> <nuovoNomeFile> – Rinomina un file● mkdir <nomeCartella> – Crea una cartellaDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  28. 28. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Cercare un file● find <percorsoInizioRicerca> -name <schemaNomeFile> – Ricerca dal percorso indicato in tutte le sottocartelle i file corrispondenti allo schema passato.● find <percorsoInizioRicerca> -regex <schemaNomeFile> – Come il precedente tranne che lo schema passato e unespressione regolare.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  29. 29. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Cambiare i permessi su un file● chmod <soggettoPermessi> < + oppure - ><permesso> <file> – soggettoPermessi: u per utente proprietario, g per gruppo del file, o per tutti gli altri. – permesso: r per la lettura, w per la scrittura, x per lesecuzione.● Esempio: – chmod og-wx file1 ● rimuove a tutti coloro che non sono il proprietario il diritto di scrittura e di esecuzione.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  30. 30. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Eseguire un programma● ./<nomeProgramma> – naturalmente chi prova ad eseguirlo deve avere il permesso di farlo. – E possibile evitare di usare il ./ solo se il programma è contenuto in una cartella indicata nella variabile di ambiente PATH. – Se il programma non è nella cartella corrente, sostituire il ./ con il percorso alla cartella del programma.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  31. 31. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Cambiare la propria password● passwd – richiede la vecchia password per assicurarsi che siete il proprietario della password. – richiede la nuova password.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  32. 32. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell La guida di riferimento per i comandi● man <comando> oppure man <funzione> – Visualizza la prima pagina relativa a quel comando/funzione.● man <numPagina> <argomento> – Visualizza la pagina <numPagina> relativa a quellargomento.● man -a <argomento> – Visualizza tutte le pagine relative a quellargomento.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  33. 33. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell I flussi di un programma Programma STDOUT (1) STDIN (0) STDERR (2)Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  34. 34. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell La guida di riferimento per i comandi● cat <file> – Stampa il contenuto di un file a video.● grep <stringa> – Legge il flusso di input e ne ristampa solo le righe che contengono la stringaDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  35. 35. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Redirezione su file E possibile redirigere i flussi standard da/verso un file: ● <comando> < <file di input> ● Il contenuto del <file di input> viene usato come flusso STDIN per il comando. ● <comando> > <file di output> ● Lo STDOUT del programma viene salvato su <file di output>. ● <comando> 2> <file di error> ● Lo STDERR del programma viene salvato su <file di error>.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  36. 36. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Redirezione su file Esempi: ● ls --help > aiutoLs.txt ● Stampa la guida di ls dentro il file aiutoLs.txt ● sendmail destinatario@server.com < email ● Invia una email il cui contenuto è scritto nel file. ● Automazione trasferimento file in remoto con ftp.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  37. 37. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Collegamento tra programmi E possibile costruire una sequenza di programmi collegata dai flussi, in modo che lSTDOUT del programma[x] è lSTDIN del programma[x+1].... ... P[x-1] P[x] P[x+1]Per creare questo collegamento usiamo il simbolo pipe | (quelloa sx dell1 e sopra il backslash ).Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  38. 38. www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo di Linux da shell Collegamento tra programmi Esempi: ● cat file1 | grep parola ● Stampa le righe di file1 che contengono parola ● Si possono concatenare più grep per restringere linsieme delle righe. ● Utile per cercare una chiamata di funzione in un file di codice C. ● Applicare più operazioni su un file: ● cat fileCompresso | decomprimi | stampaDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  39. 39. www.torlug.org www.cs.uniroma2.it gcc – GNU C Compiler ● Parte del progetto GNU ● Supporta lo standard originale del linguaggio C (C89) ed il più recente C99 ● In realtà gcc oggi sta per GNU Compilers Collection ● Homepage del progetto http://gcc.gnu.orgDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  40. 40. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Il processo di compilazione ● pre-process esegue le #macro ● compile crea un codice intermedio vicino a quello macchina ● assemble Trasforma il codice intermedio in codice macchina ● link Collega le varie parti di codice, ordinandole in un programmaDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  41. 41. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Cominciamo a compilare qualcosa ● gcc <nomeSorgente.c> ● preprocessa, compila, assembla e linka ● nessun output (a schermo) #include <stdio.h> ● produce un eseguibile a.out int main() { printf("Hello World!"); return 0; }Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  42. 42. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Opzioni interessanti ● -o <nomeFile> – specifica il nome del file generato dalla compilazione (invece di a.out); ● -l <nomeLibreria> – fa il link usando una libreria: questa opzione può essere ripetuta;Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  43. 43. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Opzioni interessanti 2 ● -D <MACRO>=<valoreMacro> – definisce la macro prima di processare i file; ● -I <path> – specifica una cartella in cui il compilatore deve cercare file da includere di default (quelli tra <>); ● -L <path> – specifica una cartella in cui il compilatore deve cercare le librerieDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  44. 44. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Opzioni interessanti 3 ● --std=c89 oppure --std=c99 – specifica che la compilazione deve essere eseguita secondo lo standard ● --pedantic – specifica che il compilatore deve dare errore per QUALSIASI cosa che non è conforme allo standard.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  45. 45. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Opzioni interessanti 4 ● -E – Preprocessa i file in input e stampa a video il risultato; ● -S – Preprocessa e compila: non assembla né linka; ● -c – Preprocessa, compila ed assembla, ma non linka.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  46. 46. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Errori comuni: distinzione tra include e librerie ● Negli header file vanno le dichiarazioni, non le definizioni; ● Al gcc vanno passati solo i file .c ; ● Quando si utilizza una libreria esterna non basta includere le sue dichiarazioni ma bisogna anche linkare il corpo delle sue funzioni; ● La libreria standard viene linkata automaticamente;Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  47. 47. www.torlug.org www.cs.uniroma2.it Debugging ● Un debugger è uno strumento che permette di: – controllare lesecuzione di un programma che avete scritto, interrompendola o riprendendola in un determinato momento. – controllare lo stato del vostro programma (variabili, stack ed altro..) ● ovvero di studiare lesecuzione del codice da voi scritto per determinare se ci sono dei casi in cui si verificano anomalie (bug).Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  48. 48. www.torlug.org www.cs.uniroma2.it Debugging ● Scoprire bachi utilizzando un debugger è unoperazione piuttosto tediosa ed andrebbe evitata per quanto possibile: – facendo una buona progettazione PRIMA ( ad es. con diagrammi di flusso e schemi dei moduli) – utilizzando regole di buona programmazione ( ad es. evitare le variabili globali, utilizzare dei nomi di variabili comprensibili) ... ma se proprio ci siamo presi un baco ...Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  49. 49. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger ● Debugger molto potente con interfaccia utilizzabile da shell. ● Fa parte del progetto GNU ● Maggiori informazioni su http://www.gnu.org/software/gdbDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  50. 50. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger ● Per utilizzare il debugger sul vostro programma dovete compilarlo con lopzione -g ; ● Eseguite gdb <nomeProgramma> ; ● A questo punto potete controllare lesecuzione del programma inserendo comandi al prompt di gdb.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  51. 51. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger Comandi ● break <nomeFunzione> oppure break <nomefile>:<riga> – Inserisce un breakpoint allinizio della funzione o alla riga indicata; ● print <nomeVariabile> oppure print <espressione> – stampa il contenuto di una variabile o il valore di una espressione; ● run – Fa partire lesecuzione del programma;Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  52. 52. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger Comandi 2 ● next – Va avanti di una istruzione; ● step – entra nellesecuzione dellistruzione; ● finish – Continua lesecuzione del programma finchè la funzione corrente non termina;Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  53. 53. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger ● kill Comandi 3 – interrompe lesecuzione del programma; ● display <variabile> oppure display <espressione> – come print, ma la stampa viene ripetuta ad ogni interruzione del programma; ● continue – riprende lesecuzione del programma finché non incontra un breakpoint o il programma non termina;Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  54. 54. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger Navigare la pila delle chiamte ● backtrace – mostra la pila delle chiamate; ● frame <numeroChiamata> – seleziona la chiamata di funzione associata al numero passato;Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  55. 55. www.torlug.org www.cs.uniroma2.it Scrivere un programma che... ● Prenda in input una serie di parole – Divise dal carattere a capo – La lettura dellinput si ferma nel caso lutente inserisca la parola basta. ● Le inserisca in un array di parole ● Al termine ristampi tutte le parole Assumiamo che lutente non sbagli MAI la procedura di inserimentoDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  56. 56. www.torlug.org www.cs.uniroma2.it Inizio Strutturiamo ilLeggi una parola dallinput codice.. è basta NO Aggiungila nellarray ? Fine SI Stampa tutte le parole nellarrayDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  57. 57. www.torlug.org www.cs.uniroma2.it Vediamo il codice...Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  58. 58. www.torlug.org www.cs.uniroma2.it Bug numero 1 ● Ho usato la funzione fgets senza aver letto bene il suo funzionamento sul manuale. ● Quando la funzione incontra un a capo n interrompe la lettura dellinput; il problema è che memorizza anche questo carattere nel buffer. ● Quindi se lutente scrive basta, nel buffer verrà scritto “bastan” ed il primo ciclo non sarà mai terminato.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  59. 59. www.torlug.org www.cs.uniroma2.it Bug numero 2 ● Questa è un errore grave: in C le stringhe in realtà sono puntatori; il buffer usato per memorizzare le parole è sempre lo stesso! ● Quindi nelle celle dell array avremo sempre lo stesso puntatore, che conterrà lultima parola che ci abbiamo scritto sopra (“basta”). ● Cosi quando stampiamo le parole ne stampa una serie tutte uguali.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  60. 60. www.torlug.org www.cs.uniroma2.it Bug numero 3 ● Oltre alle parole inserite, dentro larray, vi è sempre il valore sentinella basta che completa la serie. ● In fase di inserimento bisogna controllare che nellarray non ci finisca il valore sentinella. Oppure cambiare il ciclo 1.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  61. 61. www.torlug.org www.cs.uniroma2.it Errore stealth... ● Non appare su tutti i sistemi... ● E dovuto a qualcosa che lo standard non definisce... ● Provoca un SEGMENTATION FAULT !! (ovvero accesso a memoria non allocata!)Tutti i puntatori nellarray NON sono inizializzati aNULL: ciò significa che se non lo fa automaticamenteil sistema, andremo a chiamare la free() su puntatorinon allocati dinamicamente.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  62. 62. www.torlug.org www.cs.uniroma2.it www.torlug.orgDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

×