Tralasciamo per un attimo i programmi che usiamo giornalmente: Firefox, OpenOffice.org, Pidgin, ecc. e pensiamo, per un attimo, a cosa facciamo con il sistema operativo “nudo”.
Una delle operazioni più comuni è copiare i file da un posto all’altro. Ad esempio dal nostro hard disk ad una penna usb. Oltre a copiare, possiamo cancellare e rinominare i file.
Per compiere queste operazioni di solito ci serviamo di un apposito programma del sistema operativo, il file manager. Su Gnome è Nautilus, su Kde abbiamo Konqueror e Dolphin, su Windows c’è Explorer.
Se invece usiamo l’interfaccia testuale, daremo dei comandi. Per copiare un file useremo cp (copy), per cancellarlo useremo rm (remove), per cambiare nome o spostarlo ci serviremo di mv. Esamineremo in dettaglio questi comando in una prossima puntata.
Sia che usiamo l’interfaccia grafica o quella testuale, insomma, avremo bisogno di strumenti per manipolare i file. Ma avremo bisogno anche di strumenti di base per modificarli. Uno di questi è l’editor di testo che ci permette ad esempio di modificare i file di configurazione del sistema oppure di scrivere degli appunti, o anche un programma. Quando diamo il comando:
gedit /etc/X11/xorg.conf
per cambiare qualcosa nel file di configurazione del server grafico (ad esempio a causa di una risoluzione sballata) non sitamo facendo altro che aprire un file di testo (xorg.conf, appunto) tramite un editor (gedit). E’ quindi fondamentale che il sistema ci metta a disposizione questo strumento.
Questi programmi utili e basilari si chiamano utility. Tutti i sistemi operativi ce le hanno perché altrimenti ci potremmo fare ben poco. Più che operativi, sarebbero sistemi inoperativi
Torniamo ora al piccolo programma che avevamo visto nel primo post sui sistemi operativi.
#include <stdio.h>int main () {printf("Ecco il mio primo programma\n");return 0;}
Avevamo esaminato cosa fa printf e cosa fa return. Rimane da spiegare il resto.
Soprattutto cosa fa
#include <stdio.h>
Questa non è una vera e propria istruzione del programma, ma è importantissima lo stesso. Essa permette di “includere” nel programma le istruzioni che concretamente realizzeranno la nostra printf. Queste istruzioni in sostanza prenderanno il primo carattere e lo manderanno al video, poi il secondo, poi il terzo, ecc. Esse sono contenute in una libreria. Dobbiamo immaginare le librerie come delle vere librerie che contengono… be’, ovviamente libri. Se abbiamo bisogno di costruire un cigno di carta cercheremo nella nostra libreria un libro dal titolo “Origami”. Lo stesso fa il nostro programma: nelle librerie del sistema operativo prenderà il volume chiamato “stdio” (ovvero: standard input/output) in cui è contenuto printf. In questo modo tutti i programmi possono condividere printf tra di loro. Basta che ognuno di essi “chiami” la libreria. La stessa cosa vale anche per operazioni più complesse, come la gestione dei file.
Vedremo prossimamente l’importanza di una particolare libreria, la Libreria Standard del C, un pezzo fondamentale di un sistema Unix (e quindi anche di GNU/Linux) che permette la comunicazione tra i programmi e il nucleo del sistema operativo (il famoso kernel).












complimenti per questa serie di guide, hai uno stile molto diretto e semplice…le faro’ testare da non addetti ai lavori, per darti un feedback reale
E’ sempre un casino spiegare ai nuovi arrivati quelle 5-6 righe di codice per scrivere “Hello World”. Perciò preferisco Python
@ Markon Ah! Hai ragione. In Python lo so fare anch’io!
Guiodic sei un fiume in piena! Non riesco a starti dietro…
@sara: non c’è bisogno di starmi dietro…
tanto con Internet siamo asincroni, leggi quando vuoi…
Ho già in piedi un’altra idea: le guide per fare da grafica quello che di solito si fa da terminale.
Comunque ho ancora due post, poi prendo una pausa da questo argomento per qualche giorno, in cui parlerò di argomenti meno tecnici.
Comunque è vero che sono un fiume in piena
@koteto: grazie, mi farebbe molto piacere.
@markon: quanto c’hai ragione
ma se devi spiegare un s.o, il C è quasi d’obbligo. Certo potevo farla complicata con un paio di fork() e malloc()
@guiodic:
in verità credo che sia più complicato spiegare cosa vuol dire davvero “print Hello world” che un normale hello world in C.
Insomma per spiegare print hello world devi dire:
Cos’è print (una keyword per ora, dunque a cosa servono e cosa sono)
Cos’è Hello World (una stringa, che a sua volta è un array di caratteri)
Com’ è possibile che si possa scrivere print Hello World così al volo, e vedersi la scritta stampata a video.
Cos’è un interprete
Che differenza c’è tra un interprete e un compilatore.
In C devi dire solo quello che hai detto tu nell’articolo
Ciao, una piccola precisazione riguardo “stdio.h”: non e` questa la libreria, questo -per restare al livello di astrazione dell’articolo- e` piu` l’indice analitico della libreria stessa: questo argomento e` descritto a pagina X. In questo modo il programma sa dove cercare quando deve cercare cio` che gli serve. La libreria vera e propria e` /lib/libc.so.6 – o chi per lei –
@Ikitt:
ah, a saperlo!
Penso che anche librerie come iostream.h (per il C++) e simili siano così vero?
@Ikitt: già, l’avevo scritto pure nel post ma poi l’ho tolto perché appesantiva il discorso.
Volendo fare un paragone “stdio” è un “libro” della libreria C e stdio.h è il suo indice.
Però l’importante è che ci siamo capiti.
@Markon: con il C++ la situazione e` un po diversa; se si usano i template, a seconda dell’implementazione di questi, il file header diventa effettivamente libreria (= contiene codice, non solo dichiarazioni).
@Guiodic: lo so che lo sai -e intuivo che avessi omesso per non appesantire la trattazione-, il problema e` che molta gente non lo sa (ha imparato male) e continua allegramente a “includere la libreria stdio”
Per quello ho puntualizzato: IMHO, come principio, chiarezza non dovrebbe essere per niente a detrimento di correttezza.
Giusto per rimanere in tema. Oggi nella lezione di programmazione I (si insegna il C), il prof ha parlato di come libreria. Penso/Spero l’abbia fatto per lo stesso motivo di guiodic.
Ciao
Scusate.. ma nel post precedente non si vede “stdio.h” eheh..
> [...] il prof ha parlato di “stdio.h” come libreria [..]
Bye!
Be’, sai, dipende da come vedi la cosa. In fondo stdio è uno libreria, solo che a sua volta sta dentro libc nei sistemi *nix.
Certo, di suo, stdio.h è l’header, ma per far prima…
Ho capito…
Però ad esempio nel Kernighan & Ritchie viene detto:
Pagina 10 The C Programming Language (K & R):
The first line of the program,
#include
tells the compiler to include information about the standard input/output library;
Questo io non lo tradurrei come ” la linea TOT significa `includi la libreria`”, bensì come “la linea TOT dice al compilatore di includere le info. riguardo alla libreria standard I/O”.
Dunque… noi non andiamo a includere la libreria – credo – bensì un header file.
La libreria sarebbe quella standard, che penso sia inclusa in libc6 (vero?).
Ciao!
sì certo… ma penso sia un modo breve per il tuo prof.
Del resto includere *tutta* la libreria non avrebbe senso: il bello delle librerie è proprio che puoi usarle anche solo linkandole.
ho capito… dunque è un modo breve. meno male…
eheh
Ciao!