Weitere ähnliche Inhalte
Ähnlich wie Introduzione a Linux: differenze con windows e strumenti per la programmazione (19)
Introduzione a Linux: differenze con windows e strumenti per la programmazione
- 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.org
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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. 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. 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. 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 l'integrazione! (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. 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. www.torlug.org www.cs.uniroma2.it
Il filesystem di Linux
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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 dell'utente 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. www.torlug.org www.cs.uniroma2.it
Il filesystem di Linux
Descrizione generale delle cartelle
● /boot : contiene i file necessari all'avvio del sistema.
● /sbin : contiene i programmi per l'amministrazione 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. www.torlug.org www.cs.uniroma2.it
Il filesystem di Linux
Descrizione generale delle cartelle 2
● /root : la home dell'utente 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. 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. 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. 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 l'unmount del dispositivo.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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. 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. 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:
– l'utente proprietario del file ed i permessi che
quest'ultimo 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. 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
l'esecuzione.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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/bash
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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.
– L'interfaccia grafica potrebbe non essere presente
sulla macchina che stiamo usando (eg. server).
– Potrebbe essere l'unico modo per accedere ad una
funzionalità.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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 macchina
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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 dell'utente.
...ed è lì, immobile, che attende i vostri
comandi...
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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 l'opzione –help che fa
stampare una breve guida del comando.
● es: ls --help
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 23. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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 un'unica colonna con i loro permessi, gli
utenti ed i gruppi associati, la loro dimensione in byte,
l'ultima data di modifica;
– -h mostra la dimensione dei file nell'ordine di grandezza
più comodo per la lettura da essere umano; questa
opzione deve essere usata insieme all'opzione l.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 25. www.torlug.org www.cs.uniroma2.it
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 26. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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 cartella
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 27. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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 cartella
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 28. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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'
un'espressione regolare.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 29. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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
l'esecuzione.
● 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. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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
quell'argomento.
● man -a <argomento>
– Visualizza tutte le pagine relative a quell'argomento.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 33. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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 stringa
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 35. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shell
Collegamento tra programmi
E' possibile costruire una sequenza di programmi collegata dai
flussi, in modo che l'STDOUT del programma[x] è l'STDIN del
programma[x+1].
... ...
P[x-1] P[x] P[x+1]
Per creare questo collegamento usiamo il simbolo pipe | (quello
a sx dell'1 e sopra il backslash ).
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 38. www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo 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 l'insieme
delle righe.
● Utile per cercare una chiamata di funzione in un file di codice
C.
● Applicare più operazioni su un file:
● cat fileCompresso | decomprimi | stampa
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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.org
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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 programma
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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. 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. 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 librerie
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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. 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. 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. www.torlug.org www.cs.uniroma2.it
Debugging
● Un debugger è uno strumento che permette di:
– controllare l'esecuzione 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 l'esecuzione 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. www.torlug.org www.cs.uniroma2.it
Debugging
● Scoprire bachi utilizzando un debugger è
un'operazione 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. 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/gdb
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 50. www.torlug.org www.cs.uniroma2.it
gdb – GNU Debugger
● Per utilizzare il debugger sul vostro programma
dovete compilarlo con l'opzione -g ;
● Eseguite gdb <nomeProgramma> ;
● A questo punto potete controllare l'esecuzione
del programma inserendo comandi al prompt di
gdb.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 51. www.torlug.org www.cs.uniroma2.it
gdb – GNU Debugger
Comandi
● break <nomeFunzione> oppure break <nomefile>:<riga>
– Inserisce un breakpoint all'inizio 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 l'esecuzione del programma;
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 52. www.torlug.org www.cs.uniroma2.it
gdb – GNU Debugger
Comandi 2
● next
– Va avanti di una istruzione;
● step
– entra nell'esecuzione dell'istruzione;
● finish
– Continua l'esecuzione del programma finchè la
funzione corrente non termina;
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 53. www.torlug.org www.cs.uniroma2.it
gdb – GNU Debugger
● kill
Comandi 3
– interrompe l'esecuzione del programma;
● display <variabile> oppure display <espressione>
– come print, ma la stampa viene ripetuta ad ogni
interruzione del programma;
● continue
– riprende l'esecuzione del programma finché non
incontra un breakpoint o il programma non termina;
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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. 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 dell'input si ferma nel caso l'utente
inserisca la parola basta.
● Le inserisca in un array di parole
● Al termine ristampi tutte le parole
Assumiamo che l'utente non sbagli MAI la
procedura di inserimento
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 56. www.torlug.org www.cs.uniroma2.it
Inizio Strutturiamo il
Leggi una parola dall'input
codice..
è basta NO
Aggiungila nell'array
?
Fine
SI
Stampa tutte le parole nell'array
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 57. www.torlug.org www.cs.uniroma2.it
Vediamo il
codice...
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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 dell'input; il problema è che
memorizza anche questo carattere nel buffer.
● Quindi se l'utente 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. 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à l'ultima 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. www.torlug.org www.cs.uniroma2.it
Bug numero 3
● Oltre alle parole inserite, dentro l'array, vi è
sempre il valore sentinella basta che
completa la serie.
● In fase di inserimento bisogna controllare che
nell'array non ci finisca il valore sentinella.
Oppure cambiare il ciclo 1.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 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 nell'array NON sono inizializzati a
NULL: ciò significa che se non lo fa automaticamente
il sistema, andremo a chiamare la free() su puntatori
non allocati dinamicamente.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
- 62. www.torlug.org www.cs.uniroma2.it
www.torlug.org
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]