From e15bf09623a78b9a5ddc5cef72d54fe1f4c411a2 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Fri, 5 Jul 2002 12:31:26 +0000 Subject: [PATCH] Modifiche varie per produrre un HTML decente. ] Ho pure aggiunto l'html per il sito. --- compatib.tex | 38 +++++++++++++ gapil.tex | 7 ++- html/gapil.png | Bin 0 -> 1512 bytes html/index.html | 106 +++++++++++++++++++++++++++++++++++ html/stampa.html | 107 +++++++++++++++++++++++++++++++++++ intro.tex | 142 ++++++++++++++++++++++++++--------------------- pref.tex | 42 +++++++++----- prochand.tex | 2 +- 8 files changed, 363 insertions(+), 81 deletions(-) create mode 100644 compatib.tex create mode 100644 html/gapil.png create mode 100644 html/index.html create mode 100644 html/stampa.html diff --git a/compatib.tex b/compatib.tex new file mode 100644 index 0000000..8ccff78 --- /dev/null +++ b/compatib.tex @@ -0,0 +1,38 @@ +% Pacchetto di contabilità per evitare casini con latex2html +\newenvironment{description*} +{ +\begin{description} +} +{ +\end{description} +} +\newenvironment{itemize*} +{ +\begin{itemize} +} +{ +\end{itemize} +} +\newenvironment{enumerate*} +{ +\begin{enumerate} +} +{ +\end{enumerate} +} +\newenvironment{basedescript} +{ +\begin{description} +} +{ +\end{description} +} +\newcommand{\desclabelwidth}[1]{} +\newcommand{\desclabelstyle}[1]{} +\newenvironment{boxedminipage} +{ +\begin{minipage} +} +{ +\end{minipage} +} diff --git a/gapil.tex b/gapil.tex index dc2c43a..2326d68 100644 --- a/gapil.tex +++ b/gapil.tex @@ -21,8 +21,8 @@ \usepackage{listings} \lstloadlanguages{C++} \usepackage{color} -\usepackage{mdwlist} -\usepackage{boxedminipage} +\usepackage{mdwlist} % scommentare per la stampa (PS e PDF) +\usepackage{boxedminipage} % scommentare per la stampa (PS e PDF) %\usepackage{footnote} %\usepackage{mdwtab} % @@ -42,7 +42,7 @@ %\includeonly{macro,pref,intro,fdl} \title{\Huge \textbf{\textsl{G}a\textsl{P}i\textsl{L}}\\ -\huge Guida alla Programmazione in Linux.} +\huge Guida alla Programmazione in Linux} \author{Simone Piccardi} @@ -73,6 +73,7 @@ \tableofcontents \clearemptydoublepage +%\include{compatib} % commentare per la stampa PS e PDF \include{macro} \setcounter{secnumdepth}{-2} diff --git a/html/gapil.png b/html/gapil.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5bd95ba8dd2dc53236a0265538fc7add107589 GIT binary patch literal 1512 zcmaJ>X*8P&6#Z!JNo;4t5=$)|+bBAwwI!B_NJ~vik2s{Ly{c-bscKNAVya3}j;K;< zo1#@!RT8yJiRus$A*2|k*4XFsbAHU+ciwyFy?^(iQ5*mOr~?*#5$xB& zJS8d!R)2AZKiGtQ&e@}Z!=s?IzQ_hQVqsW(1OQ0L9Hqc8D`5{@ibOg%+KCK{9Fvk# z7ItkW0f11H1KQdpws5InK#zC@(M4}fi0hVzT>aGD@WU`po9ufx1uNH`i%OJ{P{-l5 zC9_iW(MDx%d1cbL5^hOGxsgh_KSa*|li`S{61%gKu{~I1-rve&ZZYfD2ovS>?Fsre zk+2m(Z{7MxynS0hcgW{3TJTWz_e@{3=_Bb`EatI>!ha9@TTQb3OXDn-A3oPxKDN4| zf?vwW;szS$7dpKd3nAd~-uU12^&!fssi^{htE;Qev?LVDG5Vp=R}Y0kWzx_k&Q<}b z)Vm07xTy;7@4x$(qNybn720HstgNiYNh7O=S1(+kZ*MpE&62i_+OGNfCi~%y5Rx!h z9%X!dytk*PvZf~GfdA0F26OX0VY#nQLh%udXk6#{{1`O z=NUV+i8&jtrKN?}m-|r3X0uU93^-cXJa} z)|Y!gsJjy%9~=}UZ3=(+oLNXtc!5 znVFfInqQs{%x!&6M3tA9Q=X26ym8b2b5`M=gM&kR5(S|t;}99S&SWwV4h|R$*^KOh z0(Sx-v(WLRY&z8tlGQ1FpA-12B7Jbs*~waMHOSw8j>|n>Bi6tC!1G}_Blz{_gO!!3 zNV6=@66fyO@Kh@2M{JlI|M>}%WxCd$C8z;MEJb|C%MhWe8nKLfzOWEHp(;Yo*xlVl z7E2b9~wQ%s&#YHZ|NP!BbxIi^osS25p5gRn5r+quiZJyP@tl!>KI^wLM?8@gWtMPS6zMn z+&Kw(T-BGkxw!+wGx_J|&Lkt$)zv$w)D)1)M_zvuVk6%2D`#hC+{-X*NkT#*x~1sU z9EanLRZcb!2nf*F?d$7XT+~xcPfN?fYIgMUaB5vUJMk8*_IB%ru?%w$4-d-F!9hac zdaT9es-JF%1BnCv4a_AI6O;V>d;xEcWd7dX-qgU``udI-@WYTu6w3CUChCb*Ca8MC zJPZmgDlXPYO`JDI41l211N{706BB0Q*pNZTd|&=o;PlsYUma6B=rO)XnbM+1YtdsQbETmlx(1->TBu zg)JMNDyFLZkyfJjyqoEt0f!D9C ztsNV~zqMsdP8wwQ7@s~3o^m1@>IN}>>GE=Tcvx-Q!_!kJ`5XM_`|27;5TbZ}JIs=i i-ZzK;kCFY$;`Rj#qKa54-Wt82Cj$<4PUu=2FVa7i1LRx) literal 0 HcmV?d00001 diff --git a/html/index.html b/html/index.html new file mode 100644 index 0000000..a5a9289 --- /dev/null +++ b/html/index.html @@ -0,0 +1,106 @@ + + + + GaPiL -- Guida alla Programmazione in Linux + + + + + + + + +
+ +
+ +Guida alla Programmazione in Linux
+Simone Piccardi
+
+ + + + + +
+Home +Download + +Versione online +CVS
+ +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + +Il progetto + + + + +

GaPiL nasce dalla mia convinzione profonda che la filosofia che +ispira il software libero si applichi anche ad altri campi che non siano +necessariamente quelli della scrittura di programmi per computer. In +particolare ritengo che possa assumere una grande rilevanza in ambiti come +quelli dell'educazione e della formazione. + +

Ma se trovare della buona documentazione libera, specie per quanto riguarda +i programmi che girano sul sistema GNU/Linux, è ormai relativamente facile, la +produzione di buoni testi didattici è ancora molto limitata, soprattutto se li +si cerca in lingua italiana.

+ +

GaPiL è un tentativo di scrivere un manuale di programmazione di +sistema per Linux e le GNU libc. L'obiettivo è quello di riuscire a produrre +una testo rilasciato sotto GNU +FDL, che possa servire a chi si accosta per la prima volta alla +programmazione di sistema sotto Unix, con la speranza di poter un giorno +raggiungere la qualità dei testi del compianto R. W. Stevens.

+ +

+ + +News + + + + +3 - luglio - 2002
Prima versione del sito, con rilascio della prima + versione di GaPiL in un HTML decente. +
+ + + + + diff --git a/html/stampa.html b/html/stampa.html new file mode 100644 index 0000000..4b8f006 --- /dev/null +++ b/html/stampa.html @@ -0,0 +1,107 @@ + + + + GaPiL -- Guida alla Programmazione in Linux + + + + + + + + +
+ +
+ +Guida alla Programmazione in Linux
+Simone Piccardi
+
+ + + + + + +
+Home +Download + +Versione online +CVS
+ +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + +GaPiL + + + +

GaPiL è scritta in LaTeX, la versione aggiornata di tutti i file è +disponibile in tempo reale sul CVS del +FLUG, a cui potete accedere direttamente. La versione online è pubblicata +su questo sito, e viene periodicamente aggiornata.

+ +

Dato che la resa della conversione da LaTeX in HTML non è delle migliori +ed il programma di conversione (latex2html) fa alcuni errori, ho provveduto a +mettere in linea delle versioni stampabili, la cui qualità è nettamente +superiore alla versione on line; esse sono liberamente scaricabili dagli +indirizzi seguenti, insieme all'archivio compresso di tutti i sorgenti: +

+ + +Altro materiale + + + + +Per chi può interessare potete trovare altra documentazione libera che ho +prodotto a questo indirizzo: http://firenze.linux.it/~piccardi/pubblicazioni.html + +
+ + + + + diff --git a/intro.tex b/intro.tex index 79b337f..6b7be35 100644 --- a/intro.tex +++ b/intro.tex @@ -1,10 +1,10 @@ -\chapter{L'architettura di GNU/Linux} +\chapter{L'architettura del sistema} \label{cha:intro_unix} In questo primo capitolo sarà fatta un'introduzione ai concetti generali su -cui è basato un sistema di tipo Unix come GNU/Linux, in questo modo potremo -fornire una base di comprensione mirata a sottolineare le peculiarità del -sistema che sono più rilevanti per quello che riguarda la programmazione. +cui è basato un sistema operativo di tipo Unix come GNU/Linux, in questo modo +potremo fornire una base di comprensione mirata a sottolineare le peculiarità +del sistema che sono più rilevanti per quello che riguarda la programmazione. Dopo un'introduzione sulle caratteristiche principali di un sistema di tipo Unix passeremo ad illustrare alcuni dei concetti base dell'architettura di @@ -19,12 +19,16 @@ In questa prima sezione faremo una breve panoramica sull'architettura del sistema. Chi avesse già una conoscenza di questa materia può tranquillamente saltare questa sezione. + +\subsection{Concetti base} +\label{sec:intro_base_concept} + Il concetto base di un sistema unix-like è quello di un nucleo del sistema (il -cosiddetto \textit{kernel}) a cui si demanda la gestione delle risorse -essenziali (la CPU, la memoria, le periferiche) mentre tutto il resto, quindi -anche la parte che prevede l'interazione con l'utente, deve venire realizzato -tramite programmi eseguiti dal kernel e che accedano alle risorse hardware -tramite delle richieste a quest'ultimo. +cosiddetto \textit{kernel}, nel nostro caso Linux) a cui si demanda la +gestione delle risorse essenziali (la CPU, la memoria, le periferiche) mentre +tutto il resto, quindi anche la parte che prevede l'interazione con l'utente, +deve venire realizzato tramite programmi eseguiti dal kernel e che accedano +alle risorse hardware tramite delle richieste a quest'ultimo. Fin dall'inizio uno Unix si presenta come un sistema operativo \textit{multitasking}, cioè in grado di eseguire contemporaneamente più @@ -38,7 +42,7 @@ a rotazione). %computer (e quindi per un uso personale), sui quali l'hardware (allora %limitato) non consentiva la realizzazione di un sistema evoluto come uno unix. -Gli Unix più recenti, come Linux, sono realizzati sfruttando alcune +I kernel Unix più recenti, come Linux, sono realizzati sfruttando alcune caratteristiche dei processori moderni come la gestione hardware della memoria e la modalità protetta. In sostanza con i processori moderni si può disabilitare temporaneamente l'uso di certe istruzioni e l'accesso a certe @@ -125,11 +129,13 @@ in esempio, sono implementate come normali programmi. %realizzare un sistema di permessi e controlli che evitano che i programmi %eseguano accessi non autorizzati. -Per questo motivo è più corretto parlare di un sistema GNU/Linux, in quanto da -solo il kernel è assolutamente inutile; quello che costruisce un sistema -operativo utilizzabile è la presenza di tutta una serie di librerie e -programmi di utilità che permettono di eseguire le normali operazioni che ci -si aspetta da un sistema operativo. +Per questo motivo quando ci si riferisce al sistema nella sua interezza è +corretto parlare di un sistema GNU/Linux: da solo il kernel è assolutamente +inutile; quello che costruisce un sistema operativo utilizzabile è la presenza +di tutta una serie di librerie e programmi di utilità (che di norma sono +quelli realizzati dal progetto GNU della Free Softwae Foundation) che +permettono di eseguire le normali operazioni che ci si aspetta da un sistema +operativo. \subsection{Chiamate al sistema e librerie di funzioni} @@ -137,36 +143,42 @@ si aspetta da un sistema operativo. Come accennato le interfacce con cui i programmi possono accedere all'hardware vanno sotto il nome di chiamate al sistema (le cosiddette \textit{system - call}), si tratta di un insieme di funzioni, che un programma può chiamare, -per le quali viene generata un'interruzione processo ed il controllo passa dal -programma al kernel. Sarà poi quest'ultimo che (oltre a compiere una serie di -operazioni interne come la gestione del multitasking e l'allocazione della + call}), si tratta di un insieme di funzioni che un programma può chiamare, w +per le quali viene generata un'interruzione del processo ed il controllo passa +dal programma al kernel. Sarà poi quest'ultimo che (oltre a compiere una serie +di operazioni interne come la gestione del multitasking e l'allocazione della memoria) eseguirà la funzione richiesta in \textit{kernel space} restituendo i risultati al chiamante. Ogni versione di Unix ha storicamente sempre avuto un certo numero di queste chiamate, che sono riportate nella seconda sezione del \textsl{Manuale della programmazione di Unix} (quella cui si accede con il comando \cmd{man 2 - nome}) e GNU/Linux non fa eccezione. Queste sono poi state codificate da -vari standard, che esamineremo brevemente in \secref{sec:intro_standard}. + nome}) e inux non fa eccezione. Queste sono poi state codificate da vari +standard, che esamineremo brevemente in \secref{sec:intro_standard}. Normalmente ciascuna di queste chiamate al sistema viene rimappata in opportune funzioni con lo stesso nome definite dentro la Libreria Standard del -C, che, oltre alle interfacce alle system call, contiene anche tutta una serie -di ulteriori funzioni, comunemente usate nella programmazione. +C, che, oltre alle interfacce alle system call, contiene anche tutta la serie +delle ulteriori funzioni definite dai vari standard, che sono comunemente +usate nella programmazione. Questo è importante da capire perché programmare in Linux significa anzitutto -essere in grado di usare la Libreria Standard del C, in quanto né il kernel, -né il linguaggio C, implementano direttamente operazioni comuni come la -allocazione dinamica della memoria, l'input/output bufferizzato o la -manipolazione delle stringhe, presenti in qualunque programma. - -Anche per questo in Linux è in effetti GNU/Linux, in quanto una parte -essenziale del sistema (senza la quale niente può funzionare) è la -realizzazione fatta dalla Free Software Foundation della suddetta libreria (la -GNU Standard C Library, detta in breve \textit{glibc}), in cui sono state -implementate tutte le funzioni essenziali definite negli standard POSIX e ANSI -C, che vengono utilizzate da qualunque programma. +essere in grado di usare le varie interfacce contenute nella Libreria Standard +del C, in quanto né il kernel, né il linguaggio C, implementano direttamente +operazioni comuni come la allocazione dinamica della memoria, l'input/output +bufferizzato o la manipolazione delle stringhe, presenti in qualunque +programma. + +Anche questo ci mostra in maniera evidente come nella stragrande magggioranza +dei casi,\footnote{esistono implementazioni diverse delle librerie del C, come + le \textit{libc5}, che non derivano dal progetto GNU, ma oggi sono, tranne + casi particolari, completamente soppiantate dalle \acr{glibc}.} quello che +si sta utilizzando è un sistema GNU/Linux, in quanto una parte essenziale del +sistema (senza la quale niente può funzionare) è la realizzazione fatta dalla +Free Software Foundation della suddetta libreria (la GNU Standard C Library, +detta in breve \textit{glibc}), in cui sono state implementate tutte le +funzioni essenziali definite negli standard POSIX e ANSI C, che vengono +utilizzate da qualunque programma. Le funzioni di questa libreria sono quelle riportate dalla terza sezione del Manuale di Programmazione di Unix (cioè accessibili con il comando \cmd{man 3 @@ -180,9 +192,9 @@ quello di una chiamata al sistema. \subsection{Un sistema multiutente} \label{sec:intro_multiuser} -Linux, come gli altri Unix, nasce fin dall'inizio come sistema multiutente, -cioè in grado di fare lavorare più persone in contemporanea. Per questo -esistono una serie di meccanismi di sicurezza, che non sono previsti in +Linux, come gli altri kernel Unix, nasce fin dall'inizio come sistema +multiutente, cioè in grado di fare lavorare più persone in contemporanea. Per +questo esistono una serie di meccanismi di sicurezza, che non sono previsti in sistemi operativi monoutente, e che occorre tenere presente. Il concetto base è quello di utente (\textit{user}) del sistema, le cui @@ -230,10 +242,10 @@ Infine in ogni Unix essere in grado di fare qualunque operazione; per l'utente \textit{root} infatti i meccanismi di controllo descritti in precedenza sono disattivati.\footnote{i controlli infatti vengono sempre eseguiti da un codice - del tipo \texttt{if (uid) \{ ... \}}} + del tipo \code{if (uid) \{ ... \}}} -\section{Gli standard di Unix e GNU/Linux} +\section{Gli standard} \label{sec:intro_standard} In questa sezione faremo una breve panoramica relativa ai vari standard che @@ -242,10 +254,12 @@ organizzazioni varie al riguardo del sistema o alle caratteristiche che si sono stabilite come standard di fatto in quanto facenti parte di alcune implementazioni molto diffuse come BSD o SVr4. -Ovviamente prenderemo in considerazione solo gli aspetti riguardanti +Ovviamente prenderemo in considerazione solo gli standard riguardanti interfacce di programmazione e le altre caratteristiche di un sistema -unix-like ed in particolare a come e in che modo essi sono supportati da -GNU/Linux (sia per quanto riguarda il kernel che le \acr{glibc}). +unix-like (alcuni standardizzano pure i comandi base del sistema e la shell) +ed in particolare ci concentreremo sul come ed in che modo essi sono +supportati sia per quanto riguarda il kernel che le librerie del C (con una +particolare attenzione alle \acr{glibc}). \subsection{Lo standard ANSI C} @@ -264,13 +278,13 @@ anche una libreria di funzioni che devono poter essere implementate su qualunque sistema operativo. Per questo motivo, anche se lo standard non ha alcun riferimento ad un sistema -di tipo Unix, GNU/Linux (per essere precisi le glibc), come molti Unix +di tipo Unix, GNU/Linux (per essere precisi le \acr{glibc}), come molti Unix moderni, provvede la compatibilità con questo standard, fornendo le funzioni di libreria da esso previste. Queste sono dichiarate in quindici header file (anch'essi provvisti dalla \acr{glibc}), uno per ciascuna delle quindici aree -in cui è stata suddivisa una libreria standard. In \ntab\ si sono riportati -questi header, insieme a quelli definiti negli altri standard descritti nelle -sezioni successive. +in cui è stata suddivisa una libreria standard. In (\ntab\ da fare) si sono +riportati questi header, insieme a quelli definiti negli altri standard +descritti nelle sezioni successive. In realtà \acr{glibc} ed i relativi header file definiscono un insieme di funzionalità in cui sono incluse come sottoinsieme anche quelle previste dallo @@ -285,9 +299,9 @@ usare le varie estensioni al linguaggio e al preprocessore da esso supportate. \label{sec:intro_posix} Uno standard più attinente al sistema nel suo complesso (e che concerne sia il -kernel che le librerie è lo standard POSIX. Esso prende origine dallo standard -ANSI C, che contiene come sottoinsieme, prevedendo ulteriori capacità per le -funzioni in esso definite, ed aggiungendone di nuove. +kernel che le librerie) è lo standard POSIX. Esso prende origine dallo +standard ANSI C, che contiene come sottoinsieme, prevedendo ulteriori capacità +per le funzioni in esso definite, ed aggiungendone di nuove. In realtà POSIX è una famiglia di standard diversi, il cui nome, suggerito da Richard Stallman, sta per \textit{Portable Operating System Interface}, ma la @@ -298,18 +312,22 @@ standardizzare l'interfaccia con il sistema operativo. Ma gli standard POSIX non si limitano alla standardizzazione delle funzioni di libreria, e in seguito sono stati prodotti anche altri standard per la shell e -le utility di sistema (1003.2), per le estensioni realtime e per i thread -(1003.1d e 1003.1c) e vari altri. +i comandi di sistema (1003.2), per le estensioni realtime e per i thread +(1003.1d e 1003.1c) e vari altri. Benché lo standard POSIX sia basato sui sistemi Unix esso definisce comunque -un'interfaccia e non fa riferimento ad una specifica implementazione (ad -esempio esiste un'implementazione di questo standard anche sotto Windows NT). -Lo standard si è evoluto nel tempo ed una versione più aggiornata (quella che -viene normalmente denominata POSIX.1) è stata rilasciata come standard -internazionale con la sigla ISO/IEC 9945-1:1996. +un'interfaccia di programmazione generica e non fa riferimento ad una +implementazione specifica (ad esempio esiste un'implementazione di questo +standard anche sotto Windows NT). Lo standard si è evoluto nel tempo, ed una +versione più aggiornata (quella che viene normalmente denominata POSIX.1) è +stata rilasciata come standard internazionale con la sigla ISO/IEC +9945-1:1996. Le \acr{glibc} implementano tutte le funzioni definite nello standard POSIX.1, -e Linux; +fornendo in più alcune ulteriori capacità (per funzioni di \textit{pattern + matching} e per la manipolazione delle \textit{regular expression}), che +usate dalla shell e dai comandi di sistema e che sono definite nello standard +POSIX.2. \subsection{Lo standard X/Open -- XPG3} @@ -376,7 +394,7 @@ allora versioni disponibili, fino ad arrivare al rilascio di una versione completa di Unix, chiamata appunto BSD, del tutto indipendente dal codice della AT/T. -Benchè BSD non sia uno standard formalizzato, l'implementazione di Unix +Benché BSD non sia uno standard formalizzato, l'implementazione di Unix dell'Università di Berkley, ha provveduto nel tempo una serie di estensioni e di API grande rilievo, come il link simbolici, la funzione \code{select}, i socket. @@ -426,9 +444,9 @@ matematiche. \subsection{Il comportamento standard del \cmd{gcc} e delle \acr{glibc}} \label{sec:intro_gcc_glibc_std} -In Linux gli standard appena descritti sono ottenibili sia attraverso l'uso di -opzioni del compilatore (il \cmd{gcc}) che definendo opportune costanti prima -della inclusione dei file degli header. +In Linux grazie alle \acr{glibc} gli standard appena descritti sono ottenibili +sia attraverso l'uso di opzioni del compilatore (il \cmd{gcc}) che definendo +opportune costanti prima della inclusione dei file degli header. Se si vuole che i programmi seguano una stretta attinenza allo standard ANSI C si può usare l'opzione \cmd{-ansi} del compilatore, e non sarà riconosciuta @@ -504,7 +522,7 @@ esplicitamente definendo la macro \macro{\_GNU\_SOURCE} prima di includere i vari header file. -\subsection{Gli standard di Linux} +\subsection{Gli standard di GNU/Linux} \label{sec:intro_linux_std} Da fare (o cassare, a seconda del tempo e della voglia). diff --git a/pref.tex b/pref.tex index 31adf17..db5ca4a 100644 --- a/pref.tex +++ b/pref.tex @@ -20,8 +20,9 @@ un programma. Esiste però un altro campo, diverso dalla documentazione e dai manuali, in cui avere a disposizione testi liberi, aperti e modificabili è essenziale ed -estremamente utile: quello della didattica e dell'educazione. E benché questo -sia citato dalla FDL non è altrettanto comune trovarlo messo in pratica. +estremamente utile: quello della didattica e dell'educazione. E benché anche +questo campo sia citato dalla FDL non è altrettanto comune trovarlo messo in +pratica. In particolare sarebbe di grande interesse poter disporre di testi didattici in grado di crescere, essere adattati alle diverse esigenze, modificati e @@ -29,32 +30,43 @@ ampliati, o anche ridotti per usi specifici, nello stesso modo in cui si fa per il software libero. Questo progetto mira alla stesura di un libro il più completo e chiaro -possibile sulla programmazione in GNU/Linux (che per brevità chiameremo spesso -Linux, anche nei casi in cui sarebbe comunque più appropriato il nome -compelto). Ovviamente essendo i concetti in gran parte gli stessi, esso -dovrebbe restare valido anche per la programmazione in ambito Unix generico, -pur restando l'intenzione di approfondire in maniera specifica le -caratteristiche peculiari di GNU/Linux. +possibile sulla programmazione in un sistema basato su un kernel Linux. +Essendo i concetti in gran parte gli stessi, il testo dovrebbe restare valido +anche per la programmazione in ambito Unix generico, ma resta una attenzione +specifica alle caratteristiche peculiari del kernel Linux e delle versioni +delle librerie del C in uso con esso, ed in particolare per le glibc del +progetto GNU (che ormai sono usate nella stragrande maggioranza dei casi). + +Nonostante l'uso nel titolo del solo ``Linux'', (che si è fatto sia per +brevità sia perché il libro ha a che fare principalmente con le interfacce del +kernel e dei principali standard supportati delle librerie del C), voglio +sottolineare che trovo assolutamente scorretto chiamare in questo modo un +sistema completo. Il kernel infatti, senza tutte le librerie e le applicazioni +di base fornite dal progretto GNU, sarebbe sostanzialmente inutile: per questo +il nome del sistema nella sua interezza non può che essere GNU/Linux. + +L'obiettivo finale di questo progetto è quello di riuscire a ottenere un testo +utilizzabile per apprendere i concetti fondamentali della programmazione di +sistema della stessa qualità dei libri del compianto R. W. Stevens (è un +progetto molto ambizioso ...). -L'idea è quella di riuscire a ottenere alla fine un testo utilizzabile per -apprendere la programmazione, sotto GNU/Linux della stessa qualità dei testi -del compianto R. W. Stevens (è un progetto molto ambizioso ...). Infatti benché le man pages e il manuale delle librerie del C GNU siano una fonte inesauribile di informazioni (da cui si è costantemente attinto nella stesura di tutto il testo) la loro struttura li rende totalmente inadatti ad una trattazione che vada oltre la descrizione delle caratteristiche -particolari dell'argomento in esame (in particolare lo \textit{GNU C Library - Reference Manual} non brilla certo per chiarezza espositiva). +particolari dello specifico argomento in esame (ed in particolare lo +\textit{GNU C Library Reference Manual} non brilla per chiarezza espositiva). Per questo motivo si è cercato di fare tesoro di quanto appreso dai testi di R. Stevens (in particolare \cite{APUE} e \cite{UNP1}) per rendere la trattazione dei vari argomenti in una sequenza logica il più esplicativa -possibile. +possibile, corredata, quando possibile, da programmi di esempio. Il progetto prevede il rilascio del testo sotto licenza FDL, ed una modalità di realizzazione aperta che permetta di accogliere i contributi di chiunque -sia interessato. +sia interessato. Tutti i programmi di esempio sono invece rilasciati sotto GNU +GPL. Dato che sia il kernel che tutte le librerie fondamentali di GNU/Linux sono scritte in C, questo sarà il linguaggio di riferimento del testo. In diff --git a/prochand.tex b/prochand.tex index ba61619..1d805c0 100644 --- a/prochand.tex +++ b/prochand.tex @@ -613,7 +613,7 @@ comune dopo l'esecuzione di una \func{fork} \item la maschera dei segnali bloccati (vedi \secref{sec:sig_sigmask}) e le azioni installate (vedi \secref{sec:sig_gen_beha}). \item i segmenti di memoria condivisa agganciati al processo (vedi -\secref{sec:ipc_xxx}). +\secref{sec:ipc_shar_mem}). \item i limiti sulle risorse (vedi \secref{sec:sys_resource_limit}). \item le variabili di ambiente (vedi \secref{sec:proc_environ}). \end{itemize*} -- 2.30.2