From 28d478465caab3b1ed140fd1a45c8a305f952be1 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Thu, 22 Nov 2001 00:03:42 +0000 Subject: [PATCH] Completato enviroment & C --- img/memory_layout.dia | Bin 1231 -> 1285 bytes intro.tex | 30 ++++++++++++++------------ process.tex | 49 +++++++++++++++++++++++++++++++----------- 3 files changed, 52 insertions(+), 27 deletions(-) diff --git a/img/memory_layout.dia b/img/memory_layout.dia index 3608964870209c27c2b460ef522d34cf63787866..a2b20df9b69bf46f0bda4083d09b0ce1735c5438 100644 GIT binary patch literal 1285 zcmV+g1^W6QiwFP!000001MOSej^a2FeebV`(yucn7w5t-^l0aKrImK)9U0;V?*tn; zrfK?NzkTfxnve^ZBxVM6keZf5>70~Zr(CYU*Ke=O*m%J_A&ibq8(8MIr-!c*L0{zG zoTH^74QQf9V{;+I>dRoT*=#_(O^{$5#AFQ;JopdAF&aptf%)`c7=jyJUW8q)SVE+U z*se+@H8|=$XOmea(umHV9{+%kyIaaG9I&cxw3b9H5uX!U=HVE{yNPf>=s3=P9ZgeHQ*iwhB$=!j7aS2$rkOGpV?=jMg0FFNo@9n%88W9_v74hm6Cv1{`+r7pa)|@G z%kS#BR*7>?qSHb=vZz7XkVq^hucxNV0xgz(hriW^|3VTnjd7I+go@Vdy@%hngm1gn zYZBq)%xWLo)F3S~v%xvXi*}cKu)9>)s8Wg;Z86W_zaO?JBb(z)__G&cXTj;E*SkOY$ns5Cz-_P&nrlWhT5^til~b?DP+5uD50 zM|2+J9f1pmfu~5^z#AzpM~+<5R4Z!7`3y##KdfFl7o`s4qO!{6@1 z|MKv6+K0cBuSGP4zXR-C{!jnujsM0@{rdP1o8J0IjDNR-3aIgZdrbx8fFP#;s9yoi z-TEE20Kb>Or4oQ0NC4jA5CD%30Uq$RO90+;71Zwn6%zP?UqyumytWz$fTKcEXC>qV zZ|J2m2;49n1t9QXssmRJoAC-Y8wJ*4kECEzx2kE=`N*!&pH?_E9qJPurn;UYqoRsT zUC&H@kR?t&|IL<&<~ujnbCr}GfdfM|zM~XD8ST?Vr)k3O(?sWK z;!i?xMVbiPAF#uw4UH?#*P+Z5@5k$~`RRJbD4k#$r4C%-R@p$^OLNy{WXx7Y`l=_; z*MP=yiS?b0Q}je^V_Zb9jPq-tBa|#+Oy{R>-0SwVT_cELdqL=LH>K};IY40DKo0P% z7+^1jJC#CB329qh)R051+k+2aXt};*v1P>wM*#@^p%3L)HKO3}UqUW0TJ;5EyMl4p zmZq;4FU|>e7dgSz+>C}n7^(;JL6#GSj%}-5)4h+JkO(yU*(Zf|Nx|*g(YHE8+D;cq z0cuSNVOBH;!2jgk-~d_hsM^5$K<7s}X%oab+tk<0ZcF6J`N|o#r8ql37c!_ok})cE zl$3Ur{U^pkDo=frS_)0D^l)k%K2?`XU*|4>cBF5&3w;Ng_3gjwJG_y;gLC@+Nc|yM zv~ZzG;W=!58qbsb5|!JT%0ta6uPg0gCy$J@e%s0eo<9uLSI*S~BIu4n5W1GE?QP)Q vM{SSk3*js+_xcLI<#Qqc`wIWs3V%0Ff4lYcaP;G@r-%Omo}eZm>pTDeR?K%= literal 1231 zcmV;=1Tgy_iwFP!000001MOQ|Z{j!Xyf{h$g zN+0I8k8`1fT(~4LGpIo-Rl?Et`Pk<>K0bjjUtgDz_JVm#7#-^-F!ZlacV9w+KFhy3 zM@vl_&^Wmo>kA=PpGTw3W&@&aj0EE#B5M%i(N7dbXe5nB`qQ1J6#+sdP;xK7i-h20 zx)xZYXo<)A6wQ9jIa||E&#ZF08H*U#UQjgF@1N6`KFVQ62RKKtS7?QK8Fsm1F_9)> zyQ-Kp;3V$_o7^gvMs)sk|CfEA4Jp5|$Eq7>BZ*idJ}0!w!!e4oiGaX|5boyTa*C;X ziby>LS5HCW$%=8o5fN3IDPs{vG-DEcjob6YGZe{?Ip&Jl9{rgJ!A^|-8Ab6q4rI6A z)pMy5=bVJcg?M1mfU+T>SWI4zO_u>WEPIB(RfhjUVls_zod<-9&g;E{-*$xWy4GtF z;`qdBAKEk^EpoHbDaXrp=X#LcDs5CLMTEAP=kVY5Ta=d1aW4GAEU@YScqVf9{u79X zh=ux|B`m(`gx;%i$wB zk8nm{fxvST63cTQ6D}yPEC8X?juc0DIhip|tJ`f)Zlw&VgsZOYI(Z@Ay^JXu#>J0S~|=Bvn>IE^uup zm4OE>=g|Y6W2ZW>*Qjz9g&mWUQRH8Ffs>2OUQG>PCbjGN(&izf72} zmo<&RW1YsjR+`e3;P#RdETy%f156(pWjzvrU6k#e&5jJo=7UF7dX(fEXiWZiqU%XfbT)qdkE4-l=bJAkPD1fL&4asU<|s_ z4E5sKIl=5BCs>M`(Y9~;{sYW%fXoSj>6;0wbsIS$7HIZkNDAGOf;F_GuXTttVIN7s zR+=-oW`l=SMkd6T~^&G}p{lN94)r%GvHpadLjnWJm%@#;DX$ zT-jB2pJ)rIyyTnIQfPvuhf{6;X>z;rb?y>qPx`j{(6^^p-|oA<{VVC)JEiZB)E|;X t3m1wMUcgqT@gm7@QMs9`-0!OL>^l8@#?#%w4>+FgegRsDFKy2_008~1U`YS~ diff --git a/intro.tex b/intro.tex index 18708c7..baa8f71 100644 --- a/intro.tex +++ b/intro.tex @@ -342,7 +342,7 @@ Nel 1993 il marchio Unix pass aveva comprato dalla AT\&T) al consorzio X/Open che iniziò a pubblicare le sue specifiche sotto il nome di \textit{Single UNIX Specification}, l'ultima versione di Spec 1170 diventò così la prima versione delle \textit{Single UNIX - Specification}, più comunemente nota come \textit{Unix 95}. + Specification}, SUSv2, più comunemente nota come \textit{Unix 95}. \subsection{Gli standard UNIX -- Open Group} @@ -353,17 +353,17 @@ da un gruppo di aziende concorrenti rispetto ai fondatori di X/Open) port alla costituzione dell'Open Group, un consorzio internazionale che raccoglie produttori, utenti industriali, entità accademiche e governative. -Nel 1997 fu annunciata la seconda versione delle \textit{Single UNIX - Specification}, che portava le interfacce specificate a 1434 (e a 3030 per -le stazioni grafiche, comprendendo pure la definizione di CDE che richiede sia -X11 che Motif). La conformità a questa versione permette l'uso del nome -\textit{Unix 98}, usato spesso anche per riferirsi allo standard. - - -\subsection{Il comportamento standard del \cmd{gcc}} -\label{sec:intro_gcc} - +Attualmente il consorzio è detentore del marchio depositato Unix, e prosegue +il lavoro di standardizzazione delle varie implementazioni, rilasciando +periodicamente nuove specifiche e strumenti per la verifica della conformità +alle stesse. +Nel 1997 fu annunciata la seconda versione delle \textit{Single UNIX + Specification}, nota con la sigla SUSv2, in queste versione le interfacce +specificate salgono a 1434 (e 3030 se si considerano le stazioni di lavoro +grafiche, per le quali sono inserite pure le interfacce usate da CDE che +richiede sia X11 che Motif). La conformità a questa versione permette l'uso +del nome \textit{Unix 98}, usato spesso anche per riferirsi allo standard. \subsection{Lo ``standard'' BSD} @@ -403,15 +403,17 @@ standard POSIX. +\subsection{Il comportamento standard del \cmd{gcc}} +\label{sec:intro_gcc} +\subsection{Gli standard nelle \acr{glibc}} +\label{sec:intro_glibc_std} -\subsection{Prototipi e puntatori} -\label{sec:intro_function} -\subsection{Tipi di dati primitivi} +\subsection{Gli standard di Linux} \label{sec:intro_data_types} diff --git a/process.tex b/process.tex index 1ec1780..d899675 100644 --- a/process.tex +++ b/process.tex @@ -1068,28 +1068,51 @@ delle restanti tre sono i seguenti: La funzione setta la variabile di ambiente \param{name} al valore \param{value}. - Entrembe le funzioni ritornano 0 in caso di successo e -1 per un errore, che + Entrambe le funzioni ritornano 0 in caso di successo e -1 per un errore, che è sempre \macro{ENOMEM}. \funcdecl{void unsetenv(const char *name)} La funzione rimuove la variabile di ambiente \param{name}. \end{functions} -Per modificare o aggiungere una variabile di ambiente si possono usare le -funzioni \func{putenv} e \func{setenv}. La prima prende come parametro una -stringa analoga quella restituita da \func{getenv}, e sempre nella forma -\texttt{NOME=valore}, se la variabile esiste verrà modificata, altrimenti sarà -aggiunta. La seconda permette di specificare separatamente nome e valore, -inoltre il valore di \param{overwrite} ne specifica il comportamento nel caso -la variabile esista già, sovrascrivendola se diverso da zero, lasciandola -immutata se uguale a zero. - Per cancellare una variabile di ambiente si usa \func{unsetenv}, che elimina -ogni occorrenza della variabile, se questa non esiste non è considerato un -errore. - +ogni occorrenza della variabile, se la variabile specificata non esiste non +succede nulla, e non è previsto (dato che la funzione è \type{void}) nessuna +segnalazione di errore. +Per modificare o aggiungere una variabile di ambiente si possono usare le +funzioni \func{setenv} e \func{putenv}. La prima permette di specificare +separatamente nome e valore della variabile di ambiente, inoltre il valore di +\param{overwrite} specifica il comportamento della funzione nel caso la +variabile esista già, sovrascrivendola se diverso da zero, lasciandola +immutata se uguale a zero. +La seconda funzione prende come parametro una stringa analoga quella +restituita da \func{getenv}, e sempre nella forma \texttt{NOME=valore}. Se la +variabile specificata non esiste la stringa sarà aggiunta all'ambiente, se +invece esiste il suo valore sarà settato a quello specificato da +\func{string}. Si tenga presente che, seguendo lo standard SUSv2, le +\acr{glibc} successive alla versione 2.1.2 aggiungono\footnote{il + comportamento è lo stesso delle vecchie \acr{libc4} e \acr{libc5}; nelle + \acr{glibc}, dalla versione 2.0 alla 2.1.1, veniva invece fatta una copia, + seguendo il comportamento di BSD4.4; dato che questo può dar luogo a perdite + di memoria e non rispetta lo standard il comportamento è stato modificato a + partire dalle 2.1.2, eliminando anche, sempre in conformità a SUSv2, + l'attributo \type{const} dal prototipo.} \func{string} alla lista delle +variabili di ambiente; pertanto ogni cambiamento alla stringa in questione si +riflette automaticamente sull'ambiente, e quindi si deve evitare di passare +alla funzione variabili automatiche (per evitare i problemi esposti in +\secref{sec:proc_auto_var}). + +Si tenga infine presente che se si passa a \func{putenv} solo il nome di una +variabile (cioè \param{string} è nella forma \texttt{NAME} e non contiene un +\var{=}) allora questa viene cancellata dall'ambiente. Infine se la chiamata +di \func{putenv} comporta la necessità di allocare una nuova versione del +vettore \var{environ} questo sarà allocato, ma la versione corrente sarà +deallocata solo se anch'essa risultante da una allocazione fatta in precedenza +da un'altra \func{putenv}, il vettore originale (in genere piazzato al di +sopra dello stack, vedi \figref{fig:proc_mem_layout}), o la memoria associata +alle variabili di ambiente eliminate non viene comunque liberata. \section{Problematiche di programmazione generica} -- 2.30.2