Prima di scrivere il nostro primo programma, è necessario fare
la classica distinzione tra processo e programma.
Un programma è un insieme di istruzioni in codice macchina
e dati memorizzati in formato eseguibile ed è come tale un'entità
passiva.
Un processo è invece un'istanza del programma in esecuzione
ed è quindi un'identità dinamica in costante cambiamento, le cui
istruzioni in codice macchina sono eseguite dal processore.
E particolarmente utile ricordarci questo anche quando programmiamo
in C.
Quando abbiamo di fronte un problema che vogliamo risolvere con
un nostro programma, generalmente lo descriviamo tramite delle azioni
che la macchina deve compiere per risolverlo.
Una volta compilato il codice, il passo successivo sarà di "darlo
in pasto alla macchina" ed ecco che lì il nostro programma
diventa uno o più processi.
Come vedremo successivamente, Linux è un sistema operativo multitasking,
ovvero permette l'esecuzione di più processi contemporaneamente
e in Unix uno stesso programma può generare anche più processi.
In questo capitolo inizieremo veramente a programmare, a partire
da esempi banali (alcuni lo sono anche troppo, ma non abbiate fretta
e presto vedrete i risultati!).
Breve storia del linguaggio C.
Per comprendere pienamente la filosofia di questo potentissimo
linguaggio, è necessario dare una breve occhiata al periodo storico
in cui fece la sua comparsa.
I primi embrioni di quello che sarebbe stato il C iniziarono a comparire
nel 1969, grazie al lavoro di Brian Kernighan e Dennis Ritchie presso
i laboratori della mitica Bell Research, contemporaneamente
ai primi esperimenti su un nuovo sistema operativo, battezzato UNIX
(a tal proposito vi rimando alle lezioni 5,
6
e 7
del corso di Sistemi Operativi).
Il C venne specificatamente creato per permettere ai programmatori
di accedere ai registri interni della macchina e agli slot di I/O
e di utilizzare indirizzi assoluti, fornendo nel contempo strumenti
per la modularizzazione del testo dei programmi, così come veniva
richiesto dai progetti sempre più corposi, sviluppati contemporaneamente
da più persone, che a quellepoca facevano la loro prima comparsa.
Durante gli anni 60 i sistemi operativi per computer cominciarono
a diventare sempre più complessi con lintroduzione di funzionalità
multi-terminale e multi-processo.
Inizialmente i sistemi operativi venivano pazientemente e laboriosamente
realizzati usando il codice assembler, il che faceva lievitare inevitabilmente
i tempi e i costi necessari per avere calcolatori commerciabili.
Inoltre il codice assembler non si prestava ad una facile comprensione
ed era perciò difficile scoprire (ed eliminare) le cause di eventuali
bug che venivano via via segnalati.
La necessità di ridurre tempi e costi di produzione fu la principale
motivazione che portò al linguaggio C, implementato per la prima
volta in assembler su un PDP-7 della Digital Equipment Corporation.
Una volta pronta una semplice versione assembler divenne possibile
riscrivere il compilatore direttamente in C; da allora, eccetto
piccole porzioni di codice scritto in assembler per questioni di
efficienza, il nuovo linguaggio venne usato per implementare Unix.
Questo è uno dei principali motivi che rendono il C lo strumento
principe per la programmazione di sistemi basati su Unix, tra cui
il nostro amato Linux.
Iniziamo col conoscere le parole chiave del linguaggio.
Il C è case-sensitive, cioè distingue tra lettere minuscole
e lettere maiuscole.
Le parole chiave del C, elencate sotto, sono tutte minuscole:
auto break case char const continue goto switch
default do double else enum extern float for
struct
if int long register return short signed sizeof
static
typedef union unsigned void volatile while
Sul significato di ognuna di esse ci soffermeremo nel seguito; per
ora vediamo come è composto un programma scritto in C.
La composizione di un programma C può essere riassunta in quattro
elementi di base:
- espressioni
- istruzioni
- blocchi di istruzioni
- blocchi di funzioni
A partire dalla prossima lezione cominceremo a conoscere gli elementi
base del linguaggio, ovvero le espressioni e le variabili.
Torna all'indice Generale del corso di Corso di C con Linux di Software Planet