Introduzione agli strumenti di base per la programmazione...
Transcript of Introduzione agli strumenti di base per la programmazione...
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 29
Linux: Cenni
Breve introduzione a LinuxCosa è ?Dove si trova ?Come si usa ?Che me ne faccio ?
Breve introduzione agli strumenti di programmazione
Quali sono gli strumenti per compilare ?Quali sono gli strumenti per controllare ?Dove sono le librerie ?Dove sono tutte le altre “diavolerie” ?
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 30
Linux: Cenni
Come si fa cosa ?Come faccio a sapere dove sono le cose ?Come faccio a sapere cosa stà combinando ilmio programma ?Come creo un codice sorgente ?Come lo compilo ?Come lo lancio ?Come lo “debuggo” ?
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 31
Breve introduzione: Cosa e’ ?
Cosa è ?Linux is a free Unix−type operating system originally created by Linus Torvalds with the assistance of developers around the world. Developed under the GNU General Public License , the source code for Linux is freelyavailable to everyone
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 32
Breve introduzione: Cosa e’ ?
La prima versione del kernel risale al 1994E’ “POSIX compliant”
POSIX ??? Portable Operating System Interface è una “standardizzazione” di Unix ….
ANSI CIEEE POSIXFIPSX/Open……
Ogni standard definisce l’interfaccia (“flavour”)
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 33
Breve introduzione: Cosa e’ ?
GNU GPL ???E’ la licenza che permette il libero utilizzo del software a patto di fornirlo con la sorgente. Il software è libero ma non gratuito, l’utente ha la libertà di modificarlo
GNU ????Gnu is Not Unix !!!! Fondata nel 1984 per sviluppare un sistema operativo Unix-like completamente liberoNon è Linux. L’associazione, sotto l’egida della FreeSoftware Foundation (FSF), mantiene il kernel di Linux ed una serie di applicativi fondamentali, ma non distribuisce il sistema.
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 34
Breve introduzione: Dove si trova ?
Oramai anche nelle macchinette del caffè …Data la “complicazione” del sistema è stato tradizionalmente organizzato in “distribuzioni”. La prima a diffondersi è stata la “Slackware”. Ce ne sono di libere e proprietarie, ognuna con caratteristiche diverse ed orientate ad un mercato particolare.Le più diffuse:
DebianSlackwareRedHat (Fedora Core, Enterprise)SuseMandrakeScientifc LinuxGentoo
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 35
Breve introduzione: Dove si trova ?
Di solito si posso scaricare le immagini ISO dalla rete La facilità di installazione dipende dalla distribuzione così come il sopporto per l’hardware
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 36
Breve Intro.: Che me ne faccio ?
Pros:Posso avere un “server” a poco prezzo.Sviluppatori ovunqueDiffusione di applicativi e documentazione
Cons:Manutenzione ed installazione “da esperti”Continue releaseDifficoltà a tener dietro agli upgrade hardware se non c’e’ una politica di supporto dell’azienda… Causa assuefazione …
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 37
Breve Intro: Come si usa ?
Seguire le istruzioni della distribuzione !Immettere username e password...
Le interfacce sono diverse. Essenzialmente:X-windowsTerminale ANSI
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 38
Breve Intro: Come si usa ?X-windows
XFree86. Disponibile per varie piattaforme. Open sourceimplemetazione del protocollo
Vi serve un “windows manager” :TwmFwmEnlightenmentAfterStep……….
Sarebbe meglio avere un “desktop manager” (Windows insegna ….):
KDEGNOME….
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 39
Breve Intro: Come si usa ?Ci serve una “shell”E’ una “command line interpreter” che legge l’”user input” ed esegue il comando richiesto.
“user input” ??? Puo’ essere il terminale o un file: script
E’ la nostra interfaccia “di base” con il sistema operativo.Le shell più diffuse:
sh: Bourne shellcsh: C shellksh: Korn shelltcsh: Enanched C shellbash: Bourne Again shell
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 40
Breve Intro: Come si usa ?
Dove sono i files ?In un filesystem organizzato gerarchicamente in direttori e files. L’albero gerarchico (“tree”) nasce da una radice (“root”). Il nome della root è un singolo carattere: /I direttori sono files che contengono altri direttori e files. Sono dei files che contengono le informazioni sul loro contenuto: “filenames”Filenames. Sono i nomi (files) in una directory. I nomi possono contenere tutti i caratteri tranne lo “slash”: /, ed il “blanck” (non è più così ma sarebbe meglio evitarlo:
/usr/local/bin/mio_eseguibile_.exe/home/corsovme/.filenascosto/home/corsovme/prova.exe.old_version
Il punto iniziale definisce rende invisibile il file
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 41
Breve intro: Come si usa ?Come è fatto l’albero del filesystem ?/ -
|- /bin -- Ci sono tutti gli eseguibili indispensabili|- /boot -- Files necessari al boot del sistema|- /home -- Le home directories
|- /usr -- Tutto quello che serve ad un utente |- /usr/local binari, librerie, include files etc. etc. etc.|- /usr/bin|- /usr/lib|- /usr/include
|- /include -- Include files di sistema|- /lib -- Librerie di sistema e moduli dei driver|- /etc -- Files di configurazione del sistema|-……….
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 42
Breve intro: Come si usa ?
Come mi muovo nel filesystem ?cd : change directoryls : list directory
Come posso sapere cosa c’è nei files ?cat : mostra tutto il contenuto di un file sullo standard outputmore, less: mostra il contenuto di un file sullo standard output in pagine del formato del terminaleeditandoli !!!
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 43
Breve intro: Come si usa ?
Editors:nano, pico : semplici editors alfanumericiemacs, xemacs: “more than editors: a way of life”vi: no comment !
ManualisticaTutta online, arriva con il sistema:
man : il manuale di unix, diviso in 8 capitoli “omnicomprensivo”info : il sistema di documentazione per ipertesti della GNU.
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 44
Breve intro: Come si usa ?
Cominciamo !!!!
Sulla vostra macchinaUsername: utentePassword: utente
Create dei direttori con i vostri cognomi:
mkdir my_last_name
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 45
Breve intro. Alla programmazione
Quali sono gli strumenti per compilare ?gcc. La suite di compilazione della GNU: GNU Compiler Collection
cpp: il precompilatoreas : l’assemblatoreld : il linker
…….
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 46
Breve intro. Alla programmazione
Quali sono gli strumenti per controllare ?gdb: Il debugger gnuddd: Front end grafico al gdb….. gprof: “profiler” della GNU
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 47
Breve intro. Alla programmazione
Dove sono le librerie ?Di solito in /lib, /usr/lib, /usr/local/libPossono essere ovunque. (parameteri -L –l)
…. E gli include ?Idem come sopra, nei corrispettivi direttori: include
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 48
Breve intro. Alla programmazioneCome si usa la shell ?
Una volta entrati nel computer, si presenta con un prompt, ovvero una stringa di caratteri ed attende un nostro comando. Un comando è di solito un serie di parole che descrivono:
Il comando che voglio eseguireLe opzioni con cui voglio eseguire il comandoIstruzioni per l’Input/Output (I/O)
caf@pcwizard : > ls –l /home/cafagna > lista_files.txt
Prompt Comando OpzioniComando Istruzioni I/O
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 49
Breve intro. Alla programmazioneCome si usa la shell ?
Un applicativo eseguibile si esegue chiamandolo per nome:
/home/cafagna/prove_corso/my_first/usr/local/bin/mozilla/home/billy/test.exe./prova_classi
Programma eseguibile ?In Unix ai files vengono attribuite delle modalità di accesso. Un programma puo’ essere:
Letto (read): rScritto (write): wEseguito (execute): x
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 50
Breve intro. Alla programmazioneCome si usa la shell ?
Ogni uno di questi attributi può essere stabilito per tre categorie di utenti:
Tutto il mondo (others): o (Prime tre cifre)Il gruppo di appartenenza (group): g (Seconde tre cifre)Chi lo possiede (user): u (Terze )
Per poter eseguire il programma è necessario che la mia utenza abbia il permesso di eseguirlo: x
pamela@pcwizard ~ $ ls -l set_pam_env_sh -rw-r--r-- 1 pamela users 1977 Apr 18 2007 set_pam_env_sh
Comando di shell
Nome del fileData creazioneSize ByteOwner & GroupProtezioni
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 51
Breve intro. Alla programmazioneCome si usa la shell ?
Posso cambiare le protezioni dei file usando il comando: chmod
chmod 755 nomefilechmod u+x,o=r,g=r nomefilechmod a=rwx nomefile
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 52
Breve intro. Alla programmazioneCome si usa la shell ?
Ma non avevamo detto che per eseguire un programma bisogna chiamarlo per nome ?Ma ls ? Non è in: /bin/ls ?La shell usa delle variabili di ambiente per adeguarsi alle mie esigenze. In particolare (come nell’MS-DOS) esiste la variabile: PATH. La shell cercherà l’eseguibile nelle cartelle specificate in PATH.
.:/usr/bin:/bin:/usr/local/bin:/home/bin
I direttori sono separati da :
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 53
Breve intro. Alla programmazioneCome si usa la shell ?
Come posso modificare o creare le variabili di environment ? La grammatica del comando dipende dalla shell che usiamo.Per la bash e tutte le shell derivate da Bourne si usa il comando: export
export PATH=/usr:/usr/local/bin
Per quelle derivate dalla csh si usa il comando: setenvsetenv PATH /usr:/usr/local/bin
Per vedere il contenuto di una variabile si usa il comando:printenvLe variabili devono essere precedute da ‘$’ per poter essere distinte da una normale stringa:
echo $PATH PATH
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 54
Breve intro. Alla programmazioneCome si usa la shell ?
Come fa la shell a sapere quali valori dare alle variabili di ambiente ?Legge ed esegue i comandi contenuti i dei files ben precisi. Questi files devono essere contenuti nella “home” directory dell’utente altrimenti eseguirà dei files comuni presenti in /etc
.bash_profile, viene eseguito ogni volta che fate login
.bash_login, viene eseguito se non c’è il .bash_profile
.profile, viene eseguito se non c’è il .bash_login
.bashrc, viene eseguito ogni volta che si entra in una nuova shell.bash_logout, viene eseguito ogni volta che si esce dalla shell
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 55
Breve intro. Alla programmazioneCome si usa la shell ?
Questi files contengono dei comandi si shell che vengono eseguiti in sequenza. E’ possibile creare sequenze di comandi di solito detti scriptGli script di bash vengono tradizionalmente nominati con l’estensione sh .Gli script possono essere eseguiti usando il comando: source ( o il sinonimo ‘.’ )Se resi eseguibili possono essere eseguiti come altri eseguibili, i.e. chiamandoli per nome
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 56
Breve intro. Alla programmazioneCome si usa la shell ?
Oltre che attraverso le variabili di ambiente, posso personalizzare la mia shell attraverso la definizione di alias , ovvero sostituire a comandi lunghi o complessi dei nomi più facili da ricordare:
alias dir=‘ls –l |grep ^d’
Di solito vengono definiti nelle .bashrcEsistono delle variabili speciali che contengono le parole presenti in una linea di comando:
0, la prima parolan, la n-esima+1 parola
Esistono delle “wildcards”. Le più comuni:*, una qualsiasi string di caratteri?, un qualsiasi singolo carattere
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 57
Breve intro. Alla programmazioneCome si usa la shell ?
Ma cosa vuol dire ‘>’, “>>”, ‘<‘, ‘|’ ?I primi tre sono simboli di ridirezione dello standard outpute lo standard inputL’ultimo di “pipeline” tra due programmiRidirezione dello standard output ed input ?
Come faccio se non voglio che il mio output vada a finire sul monitor ?Come faccio se voglio dare delle opzioni o altro non dalla tastiera ?
cat < file_da_copiare > file_copiatoE se non voglio sovrascrivere il file ?
cat < file_da_copiare >> file_copiato
Se un programma è in grado di leggere dallo standard input posso fargli leggere l’output di un altro programma ?
Li metto in “pipe”cat file_da_copiare | grep –c echo
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 58
Breve intro. Alla programmazioneCome si usano i tools di compilazione ?
Si chiamano per nome e si cerca di usare le opzioni corrette:
g++ [OPZIONI] nomefile_da_compilare
Le opzioni di solito prendono la forma: Shortform: -’lettera’
g++ –g –c my_first.cpp
Longform: --’stringa’g++ --help
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 59
Breve intro. Alla programmazioneCome si usano i tools di compilazione ?
Le opzioni che useremo maggiormente: -v :be verbose-c :solo compilazione-o filename : nome del files si output-Ldirname : nome del direttorio dove cercare la librerie
(notare la mancanza di spazi)-llibname : nome della libreria da usare per il link (notare
la mancanza di spazi). Le librerie devono chiamarsi: liblibname.a o liblibname.so: libMath.so, libMyAnalysis.so corrispondono a –lMath -lMyAnalysis
-Idirname : nome del direttorio dove cercare gli “include” files (notare la mancanza di spazi)
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 60
Breve intro. Alla programmazione
Due parole su make:Determina automaticamente cosa va compilato e come, sulla base di dipendenze e regole che sono contenute in un file ASCII.L’azione da effettuare è chiamata “target”
Un target deve essere seguito da ‘:’Per ogni target è possibile specificare altri target da cui dipende.L’azione da effettuare deve essere preceduta da un simbolo di tabulazione
Ci sono delle regole implicite.Proviamo con: info make
F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 61
Breve intro. Alternative
E per chi ama Windows ?????Tutti i tools sono disponibili anche per WinProvate cygwin: www.cygwin.com
Fate prima, avrete a disposizione una completa suite di tools unix
Xemacs: www.xemacs.orgDev-c++, IDE (Integrate DevelopmentEnviromnent) per C++ in Win: www.bloodshed.net