X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=intro.tex;h=97c26bce81ea96bf977c2cab0bc0e3a1b5eaf391;hb=975734ea91207bfbf931d2dc3bff62510087d5ba;hp=24e301d50252eafbae2df1ed2e9c9c08b050ca74;hpb=ffb12837c5ed8ccc095bc9c88349cd19b5e6b472;p=gapil.git diff --git a/intro.tex b/intro.tex index 24e301d..97c26bc 100644 --- a/intro.tex +++ b/intro.tex @@ -242,23 +242,26 @@ comando \cmd{man 2 }, ed anche Linux non fa eccezione. Queste \textit{system call} sono poi state codificate da vari standard, che esamineremo brevemente in sez.~\ref{sec:intro_standard}. -Normalmente ciascuna chiamata al sistema fornita dal kernel viene associata ad -una funzione con lo stesso nome definita all'interno della libreria +Normalmente ciascuna \textit{system call} fornita dal kernel viene associata +ad una funzione con lo stesso nome definita all'interno della libreria fondamentale del sistema, quella che viene chiamata \textsl{Libreria Standard del C} (\textit{C Standard Library}) in ragione del fatto che il primo kernel Unix e tutti i programmi eseguiti su di esso vennero scritti in C, -usando le librerie di questo linguaggio. Questa libreria, oltre alle -interfacce delle \textit{system call}, contiene anche tutta una serie di -ulteriori funzioni di utilità che vengono comunemente usate nella -programmazione e sono definite nei vari standard che documentano le interfacce -di programmazione di un sistema unix-like. - -Questo concetto è importante da tener presente perché programmare in Linux -significa anzitutto essere in grado di usare le funzioni fornite dalla -\textsl{Libreria Standard del C}, in quanto né il kernel, né il linguaggio C -implementano direttamente operazioni ordinarie come l'allocazione dinamica -della memoria, l'input/output bufferizzato sui file o la manipolazione delle -stringhe, che sono comunemente usate da qualunque programma. +usando le librerie di questo linguaggio. In seguito faremo riferimento alle +funzioni di questa libreria che si interfacciano alle \textit{system call} +come ``\textsl{funzioni di sistema}''. + +Questa libreria infatti, oltre alle interfacce delle \textit{system call}, +contiene anche tutta una serie di ulteriori funzioni di utilità che vengono +comunemente usate nella programmazione e sono definite nei vari standard che +documentano le interfacce di programmazione di un sistema unix-like. Questo +concetto è importante da tener presente perché programmare in Linux significa +anche essere in grado di usare le funzioni fornite dalla \textsl{Libreria + Standard del C}, in quanto né il kernel, né il linguaggio C implementano +direttamente operazioni ordinarie come l'allocazione dinamica della memoria, +l'input/output bufferizzato sui file o la manipolazione delle stringhe, la +matematica in virgola mobile, che sono comunemente usate da qualunque +programma. Tutto ciò mette nuovamente in evidenza il fatto che nella stragrande maggioranza dei casi si dovrebbe usare il nome GNU/Linux in quanto una parte @@ -340,7 +343,7 @@ la cui corrispondenza ad un nome espresso in caratteri è inserita nei due file \conffile{/etc/passwd} e \conffile{/etc/group}.\footnote{in realtà negli sistemi più moderni, come vedremo in sez.~\ref{sec:sys_user_group} queste informazioni possono essere mantenute, con l'uso del - \itindex{Name~Service~Switch} \textit{Name Service Switch}, su varie + \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}, su varie tipologie di supporti, compresi server centralizzati come LDAP.} Questi identificativi sono l'\textit{user identifier}, detto in breve \textsl{user-ID}, ed indicato dall'acronimo \ids{UID}, e il \textit{group @@ -474,7 +477,7 @@ altrettante directory del filesystem radice, su quelli che vengono chiamati \index{mount~point} \textit{mount point}. Questo comunque avverrà sempre in un secondo tempo, in genere a cura dei programmi eseguiti nella procedura di inizializzazione del sistema, grazie alle funzioni che tratteremo in -sez.~\ref{sec:sys_file_config}. +sez.~\ref{sec:filesystem_mounting}. \subsection{La risoluzione del nome di file e directory} @@ -515,6 +518,8 @@ nomi che indicano le directory che lo compongono. Dato che la directory radice sta in cima all'albero, essa viene indicata semplicemente con il \textit{pathname} \file{/}. +\itindbeg{pathname~resolution} + Un file può essere indicato rispetto ad una directory semplicemente specificandone il nome, il manuale della \acr{glibc} chiama i nomi contenuti nelle directory \textsl{componenti} (in inglese \textit{file name @@ -550,14 +555,15 @@ corrente e il secondo alla directory \textsl{genitrice} (o \textit{parent directory}) cioè la directory che contiene il riferimento alla directory corrente. -In questo modo con ``\file{..}'' si può usare un \textsl{pathname relativo} -per indicare un file posto al di sopra della directory corrente, tornando -all'indietro nell'albero dei file. Questa retromarcia però su fermerà una -volta raggiunta la directory radice, perché non esistendo in questo caso una -directory superiore, il nome ``\file{..}'' farà riferimento alla radice -stessa. +In questo modo con ``\file{..}'' si può usare un \itindsub{pathname}{relativo} +pathname relativo per indicare un file posto al di sopra della directory +corrente, tornando all'indietro nell'albero dei file. Questa retromarcia però +su fermerà una volta raggiunta la directory radice, perché non esistendo in +questo caso una directory superiore, il nome ``\file{..}'' farà riferimento +alla radice stessa. \itindend{pathname} +\itindend{pathname~resolution} \subsection{I tipi di file} @@ -935,7 +941,7 @@ presenti neanche in System V) sono state tralasciate. Le funzionalità implementate sono principalmente il meccanismo di intercomunicazione fra i processi e la memoria condivisa (il cosiddetto System V IPC, che vedremo in sez.~\ref{sec:ipc_sysv}) le funzioni della famiglia -\func{hsearch} e \func{drand48}, \func{fmtmsg} e svariate funzioni +\funcm{hsearch} e \funcm{drand48}, \funcm{fmtmsg} e svariate funzioni matematiche. @@ -1347,7 +1353,7 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco: a 64 bit nelle funzioni di gestione dei file (non supportati in certi sistemi), caratterizzate dal suffisso \texttt{64} aggiunto ai vari nomi di tipi di dato e funzioni (come \type{off64\_t} al posto di \type{off\_t} o - \func{lseek64} al posto di \func{lseek}). + \funcm{lseek64} al posto di \func{lseek}). Le funzioni di questa interfaccia alternativa sono state proposte come una estensione ad uso di transizione per le \textit{Single UNIX Specification}, @@ -1376,9 +1382,9 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco: \item[\macro{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili le estensioni delle funzioni di creazione, accesso e modifica di file e - directory che risolvono i problemi di sicurezza insiti nell'uso di pathname - relativi con programmi \itindex{thread} \textit{multi-thread} illustrate in - sez.~\ref{sec:file_openat}. + directory che risolvono i problemi di sicurezza insiti nell'uso di + \textit{pathname} relativi con programmi \itindex{thread} + \textit{multi-thread} illustrate in sez.~\ref{sec:file_openat}. \item[\macro{\_REENTRANT}] definendo questa macro, o la equivalente \macro{\_THREAD\_SAFE} (fornita per compatibilità) si rendono disponibili le @@ -1399,10 +1405,10 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco: Le funzioni di libreria che vengono messe sotto controllo quando questa funzionalità viene attivata sono, al momento della stesura di queste note, - le seguenti: \func{memcpy}, \func{mempcpy}, \func{memmove}, \func{memset}, - \func{stpcpy}, \func{strcpy}, \func{strncpy}, \func{strcat}, \func{strncat}, - \func{sprintf}, \func{snprintf}, \func{vsprintf}, \func{vsnprintf}, e - \func{gets}. + le seguenti: \funcm{memcpy}, \funcm{mempcpy}, \funcm{memmove}, + \funcm{memset}, \funcm{stpcpy}, \funcm{strcpy}, \funcm{strncpy}, + \funcm{strcat}, \funcm{strncat}, \func{sprintf}, \func{snprintf}, + \func{vsprintf}, \func{vsnprintf}, e \func{gets}. La macro prevede due valori, con \texttt{1} vengono eseguiti dei controlli di base che non cambiano il comportamento dei programmi se si richiede una