1 <?xml version="1.0" encoding="utf-8"?>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
4 "DTD/xhtml1-strict.dtd">
6 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="it">
8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9 <title>GaPiL -- Guida alla Programmazione in Linux</title>
10 <meta name="author" content="Simone Piccardi" />
11 <meta name="title" content="Guida alla Programmazione in Linux" />
12 <meta name="description" content="Un manuale di programmazione avanzata in
14 <meta name="keywords" content="programmazione, programmazione linux,
15 POSIX, programmazione avanzata "/>
16 <style type="text/css">
18 a {text-decoration: none;}
19 td {font-family: sans-serif}
23 <body link="mediumslateblue" vlink="mediumblue" alink="red" bgcolor="white">
25 <table cellspacing="0" cellpadding="0" border="0" width="800">
28 <td width="170" align="center">
29 <img src="gapil.png" width="160" border="0" />
31 <td valign="bottom" align="left" bgcolor="white">
32 <table cellspacing="0">
35 <font face="sans-serif" size="+4"
36 color="darkred" style="font-size: 22pt">
37 <b>Guida alla Programmazione in Linux</b>
39 <font color="midnightblue">
40 <b>Simone Piccardi</b>
51 <table width="790" cellspacing="0" cellpadding="3" border="0">
54 <td width="164" align="center" >
56 <td align="center" bgcolor="#dddddd">
57 <a target="_parent" href="index.html">
58 <font face="sans-serif">
63 <td align="center" bgcolor="#dddddd">
64 <a target="_parent" href="stato.html">
65 <font face="sans-serif">
70 <td align="center" bgcolor="#dddddd">
71 <a target="_parent" href="download.html">
72 <font face="sans-serif">
77 <td align="center" bgcolor="#dddddd">
79 href="http://www.lilik.it/~mirko/gapil/gapil.html">
80 <font face="sans-serif" color="darkred">
81 <b>Versione online</b>
85 <td align="center" bgcolor="#dddddd">
87 href="http://gapil.truelite.it/sources">
88 <font face="sans-serif">
98 <table width="1000" cellspacing="10" cellpadding="10" border="0">
101 <td width="130" valign="top"><b>
102 <font color="#0000aa">
107 <td bgcolor="lightblue" width="600">
108 <b>GaPiL</b> nasce dalla mia convinzione profonda che la <a
109 href="http://www.gnu.org/philosophy/philosophy.it.html">
110 "filosofia"</a> che ispira il software libero si applichi anche
111 ad altri campi che non siano necessariamente quelli della
112 scrittura di programmi per computer. In particolare ritengo che
113 possa assumere una grande rilevanza in ambiti come quelli
114 dell'educazione e della formazione.
116 <p> Ma se trovare della buona documentazione libera, specie per
117 quanto riguarda i programmi che girano sul sistema GNU/Linux,
118 è ormai relativamente facile, la produzione di buoni testi
119 didattici è ancora molto limitata, soprattutto se li si cercano
122 <p> <b>GaPiL</b> è un tentativo di scrivere un manuale di
123 programmazione di sistema in ambiente Linux, con una
124 particolare attenzione alle caratteristiche specifiche delle
125 interfacce fornite dal kernel. Per questo motivo si parla di
126 Linux e non di GNU/Linux.
128 <p> Nonostante questa specificità, essendo la gran parte delle
129 funzioni di sistema standardizzate, la guida dovrebbe
130 risultare utile anche facendo riferimenti ad altri sistemi di
131 tipo Unix come BSD, in ogni caso si sono sottolineate
132 esplicitamente le caratteristiche specifiche di Linux.
135 Benché buona parte della trattazione delle funzioni di
136 libreria sia del tutto identica, facendo riferimento a
137 standard generali come POSIX, si
138 è comunque prestata particolare attenzione alle funzioni delle
139 GNU libc, che sono la versione più usata delle librerie del C,
140 senza dimenticare, ove note, di citare le differenze con
141 possibili alternative come le libc5 o le uclibc.
144 L'obiettivo resta comunque quello di riuscire a produrre un
145 testo, rilasciato sotto <a
146 href="http://www.gnu.org/copyleft/fdl.html">GNU FDL</a>, che
147 possa servire a chi si accosta per la prima volta alla
148 programmazione avanzata e di sistema su un kernel Linux, con
149 la speranza di poter un giorno raggiungere la qualità dei
150 lavori del compianto R. W. Stevens.
154 <!-- Generated by OpenX 2.8.5 -->
155 <script type='text/javascript' src='http://openx.fountainpen.it/www/delivery/spcjs.php?id=3'></script>
156 <script type='text/javascript'><!--// <![CDATA[
157 /* [id3] gapil.truelite.it - Default */
159 // ]]> --></script><noscript><a target='_blank' href='http://openx.fountainpen.it/www/delivery/ck.php?n=80aa9ec'><img border='0' alt='' src='http://openx.fountainpen.it/www/delivery/avw.php?zoneid=3&n=80aa9ec' /></a></noscript>
163 <td width="130" valign="top">
165 <font color="#0000aa">
170 <td bgcolor="lightblue">
172 Potete trovare altra documentazione libera di vario tipo (non
173 necessariamente attinente l'informatica) prodotta da me
175 href="http://firenze.linux.it/~piccardi/pubblicazioni.html">
176 http://firenze.linux.it/~piccardi/pubblicazioni.html</a>
178 Invece la documentazione tecnica più recente che ho prodotto è
179 pubblicata sul sito di <a href="http://www.truelite.it">Truelite
180 Srl</a>, ed in particolare sono disponibili una serie di manuali
181 su temi di natura sistemistica a partire da <a href=
182 "http://labs.truelite.it/truedoc">
183 http://labs.truelite.it/truedoc</a>.
186 Infine, sia per dar sfogo ad una passione personale, che per
187 giocare con Mediawiki, ho creato una sito dedicato alla storia
188 della penna stilografica, con molto materiale ed informazioni,
189 sempre libere, all'indirizzo:
191 href="http://www.fountainpen.it">
192 http://www.fountainpen.it</a>
198 <td width="130" valign="top">
200 <font color="#0000aa">
205 <td bgcolor="lightblue">
206 <b>6 - dicembre - 2008</b> <br/> Aggiornata la versione cartacea
207 acquistabile su lulu.com, all'indirizzo
208 <a href="http://stores.lulu.com/piccardi">
209 http://stores.lulu.com/piccardi</a>, contiene le ultime
210 novità in particolare riguardo le funzioni delle ACL. Si
211 ricorda che il sovrapprezzo serve a finanziare lo sviluppo del
212 testo; si può sempre scaricare la versione corrente aggiornata
213 e gratuita da questo sito.
215 <b>5 - gennaio - 2007</b> <br/> Pubblicata una versione
216 stampabile a richiesta su lulu.com, ordinabile all'indirizzo
217 <a href="http://stores.lulu.com/piccardi">
218 http://stores.lulu.com/piccardi</a>.
220 <b>1 - giugno - 2006</b> <br/> Nuova revisione con varie aggiunte
221 e correzioni, in occasione della pubblicazione sul DVD di
224 <b>11 - marzo - 2005</b> <br/> Modificata la pagina dell'accesso
225 ai sorgenti, non viene più utilizzato ViewCVS ma è stato
226 installato il sistema di tracking <a
227 href="http://www.edgewall.com/trac/">trac</a> che oltre alla
228 navigazione dei contenuti consente di tenere sotto controllo le
229 revisioni, e l'evoluzione della guida e di inviare ticket via
232 <b>6 - marzo - 2005</b> <br/> Realizzato un web server
233 elementare a scopo didattico, in vista <a href="
234 http://www.lilik.it/page.php?pg=gapil">dell'iniziativa del
237 <b>12 - gennaio - 2005</b> <br/> Completata la sezione sulla
238 gestione della risoluzione degli indirizzi ed iniziata la
239 sezione sulle opzioni dei socket.
241 <b>19 - luglio - 2004</b> <br/> Completata una prima sezione sui
242 socket UDP ed iniziata una sezione sulle funzioni per la
243 risoluzione degli indirizzi. Inoltre da oggi i sorgenti di Gapil
244 sono accessibili usando <a href="http://subversion.tigris.org/">
245 Subversion</a> sul sito di <a
246 href="http://www.truelite.it">Truelite Srl</a>.
248 <b>3 - marzo - 2004</b> <br/> Ristrutturata la parte sulla
249 programmazione di rete, inserita la sezione sull'I/O
250 multiplexing (completata con esempio di server basato su
251 <b>poll</b>) nella sezione sui socket TCP. Introdotti i nuovi
252 capitoli sugli altri socket, ed iniziata la sezione sui socket
255 <b>26 - dicembre - 2003</b> <br/> Inserito esempio di server
256 basato sull'I/O multiplexing. Ristrutturato il capitolo sui file
257 avanzati scorporando in una sezione a parte l'I/O multiplexing,
258 e inserendo alcuni esempi per <b>pselect</b>. Creata una terza
259 parte per le appendici.
261 <b>8 - novembre - 2003</b> <br/> Corretta tabella sbagliata al
262 capitolo 5, completata la sezione sull'uso dell'I/O multiplexing
263 sul lato client ed iniziata la versione server, inserita la
264 trattazione della funzione shutdown.
267 <b>21 - settembre - 2003</b> <br/> Completato il capitolo sui
268 socket elementari, e corretti numerosi errori. Revisione della
269 sezione sull'I/O multiplexing nel capitolo sui file avanzati in
270 vista dell'uso nel capitolo sui socket TCP avanzati.
273 <b>6 - aprile - 2003</b> <br/> Grazie all'incredibile lavoro di
274 Mirko Maischberger abbiamo una favolosa versione in HTML, che
275 collego direttamente dalla sua home page. Non finirò mai di
276 ringraziarlo per aver domato htlatex fino a produrre la prima
277 versione di GaPiL realmente consuntabile on line. Con
278 l'occasione è stata completamente revisionata la parte di
279 introduzione alle reti.
282 <b>10 - marzo - 2003</b> <br/> Completata la memoria condivisa
283 POSIX, introdotte le relative funzioni di interfaccia,
284 revisionati ed ampliati i capitoli sull'introduzione alla rete
288 <b>20 - febbraio - 2003</b> <br/> Completata la sezione sulle
289 alternative al SysV IPC, introdotte le code di messaggi POSIX,
290 un esempio di uso della memoria condivisa, e parecchie revisioni
294 <b>10 - dicembre - 2002</b> <br/> Completata la sezione sul file
295 locking, inserita una nuova sezione sulle alternative al SysV
296 IPC, estesa la parte sulla memoria condivisa, fatta una
297 revisione generale degli indici.
300 <b>26 - ottobre - 2002</b> <br/> Revisione di terminali, code di
301 messaggi e advisory file locking. Aggiunta la struttura dei
302 semafori SysV IPC, del file locking in stile POSIX, ed un
303 contributo di Daniele Masini sull'allocazione della memoria.
306 <b>18 - ottobre - 2002</b> <br/> Aggiunte: trattazione elementare
307 dei terminali, dei semafori di System V IPC, del file locking in
311 <b>24 - settembre - 2002</b> <br/> Spostato tutto sul CVS
312 pubblico del FLUG che consente l'accesso anonimo. Aggiunta una
313 trattazione preliminare delle code di messaggi di System V IPC e
314 del controllo di sessione.
317 <b>20 - agosto - 2002</b> <br/> Completata la stesura preliminare
318 del memory mapped I/O, inserito un esempio di server basato
319 sulle FIFO, completata la versione iniziale dell'introduzione
323 <b>7 - agosto - 2002</b> <br/> Completata la prima stesura delle
324 sezioni relative all'I/O asincrono ed ai segnali real-time,
325 iniziata la stesura della sezione sul memory mapped I/O.
328 <b>22 - luglio - 2002</b> <br/> Iniziata la stesura del capitolo
329 sull'I/O avanzato. Completata la sezione su pipe e FIFO (in
330 versione preliminare) inziate le sezioni su I/O asincrono ed una
331 sezione aggiuntiva sui segnali real-time nel relativo capitolo.
334 <b>3 - luglio - 2002</b> <br/> Prima versione del sito, con
335 rilascio della prima versione di GaPiL in un HTML passabile.
336 <br/> Sono in versione preliminare, ma ricontrollati e di
337 qualità accettabile, i capitoli dal primo al nono: introduzione,
338 gestione dei processi, interfacce di base per i file e per il
339 controllo dei parametri del sistema, gestione dei segnali. Sono
340 da ricontrollare, ma di qualità decente, i capitoli dal
341 tredicesimo al sedicesimo: reti e socket elementari (il
342 sedicesimo capitolo è incompleto). Sono in corso di stesura, e
343 pertanto di qualità non classificabile (che può oscillare fra la
344 bozza non rivista ed il semplice elenco degli argomenti) gli
353 <script type="text/javascript">
354 var pkBaseURL = (("https:" == document.location.protocol) ? "https://piwik.fountainpen.it/" : "http://piwik.fountainpen.it/");
355 document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
356 </script><script type="text/javascript">
358 var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3);
359 piwikTracker.trackPageView();
360 piwikTracker.enableLinkTracking();
362 </script><noscript><p><img src="http://piwik.fountainpen.it/piwik.php?idsite=3" style="border:0" alt=""/></p></noscript>
363 <!-- End Piwik Tag -->