X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=filestd.tex;h=a5cab488924b422dee4001148edd4b9fbb3e30df;hb=74b559a3958675adf01c9a906cdd485eaf399290;hp=3fde1d701e18309337d44b05337ecb1789341d97;hpb=6f8e0ca42d3d0b97b5e5747798a1eaffb44e8521;p=gapil.git diff --git a/filestd.tex b/filestd.tex index 3fde1d7..a5cab48 100644 --- a/filestd.tex +++ b/filestd.tex @@ -1,6 +1,6 @@ %% filestd.tex %% -%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -256,8 +256,8 @@ preventivamente chiuso. Infine \func{fdopen} viene usata per associare uno stream ad un file descriptor esistente ottenuto tramite una altra funzione (ad esempio con una \func{open}, una \func{dup}, o una \func{pipe}) e serve quando si vogliono -usare gli stream con file come le fifo o i socket\index{socket}, che non -possono essere aperti con le funzioni delle librerie standard del C. +usare gli stream con file come le fifo o i socket, che non possono essere +aperti con le funzioni delle librerie standard del C. \begin{table}[htb] \centering @@ -268,21 +268,23 @@ possono essere aperti con le funzioni delle librerie standard del C. \hline \hline \texttt{r} & Il file viene aperto, l'accesso viene posto in sola - lettura, lo stream è posizionato all'inizio del file.\\ - \texttt{r+} & Il file viene aperto, l'accesso viene posto in lettura e - scrittura, lo stream è posizionato all'inizio del file. \\ + lettura, lo stream è posizionato all'inizio del file.\\ + \texttt{r+}& Il file viene aperto, l'accesso viene posto in lettura e + scrittura, lo stream è posizionato all'inizio del file. \\ % \hline \texttt{w} & Il file viene aperto e troncato a lunghezza nulla (o - creato se non esiste), l'accesso viene posto in sola scrittura, lo - stream è posizionato all'inizio del file.\\ - \texttt{w+} & Il file viene aperto e troncato a lunghezza nulla (o - creato se non esiste), l'accesso viene posto in scrittura e lettura, - lo stream è posizionato all'inizio del file.\\ + creato se non esiste), l'accesso viene posto in sola + scrittura, lo stream è posizionato all'inizio del file.\\ + \texttt{w+}& Il file viene aperto e troncato a lunghezza nulla (o + creato se non esiste), l'accesso viene posto in scrittura e + lettura, lo stream è posizionato all'inizio del file.\\ % \hline \texttt{a} & Il file viene aperto (o creato se non esiste) in - \textit{append mode}, l'accesso viene posto in sola scrittura. \\ - \texttt{a+} & Il file viene aperto (o creato se non esiste) in - \textit{append mode}, l'accesso viene posto in lettura e scrittura. \\ + \itindex{append~mode} \textit{append mode}, l'accesso viene + posto in sola scrittura.\\ + \texttt{a+}& Il file viene aperto (o creato se non esiste) in + \itindex{append~mode} \textit{append mode}, l'accesso viene + posto in lettura e scrittura.\\ \hline \texttt{b} & specifica che il file è binario, non ha alcun effetto. \\ \texttt{x} & l'apertura fallisce se il file esiste già. \\ @@ -753,10 +755,10 @@ processo adiacente al buffer.\footnote{questa tecnica Questa è una delle vulnerabilità più sfruttate per guadagnare accessi non autorizzati al sistema (i cosiddetti \textit{exploit}), basta infatti inviare una stringa sufficientemente lunga ed opportunamente forgiata per -sovrascrivere gli indirizzi di ritorno nello \itindex{stack} stack (supposto -che la \func{gets} sia stata chiamata da una subroutine), in modo da far -ripartire l'esecuzione nel codice inviato nella stringa stessa (in genere uno -\textit{shell code} cioè una sezione di programma che lancia una shell). +sovrascrivere gli indirizzi di ritorno nello \itindex{stack} \textit{stack} +(supposto che la \func{gets} sia stata chiamata da una subroutine), in modo da +far ripartire l'esecuzione nel codice inviato nella stringa stessa (in genere +uno \textit{shell code} cioè una sezione di programma che lancia una shell). La funzione \func{fgets} non ha i precedenti problemi di \func{gets} in quanto prende in input la dimensione del buffer \param{size}, che non verrà mai @@ -1099,7 +1101,7 @@ sez.~\ref{sec:proc_variadic}), sono \funcd{vprintf}, \funcd{vfprintf} e \bodydesc{Le funzioni ritornano il numero di caratteri stampati.} \end{functions} \noindent con queste funzioni diventa possibile selezionare gli argomenti che -si vogliono passare ad una routine di stampa, passando direttamente la lista +si vogliono passare ad una funzione di stampa, passando direttamente la lista tramite l'argomento \param{ap}. Per poter far questo ovviamente la lista degli argomenti dovrà essere opportunamente trattata (l'argomento è esaminato in sez.~\ref{sec:proc_variadic}), e dopo l'esecuzione della funzione l'argomento @@ -1417,7 +1419,7 @@ Dato che la procedura di allocazione manuale (come delle scritture accidentali sul buffer) e non assicura la scelta delle dimensioni ottimali, è sempre meglio lasciare allocare il buffer alle funzioni di libreria, che sono in grado di farlo in maniera ottimale e trasparente -all'utente (in quanto la disallocazione avviene automaticamente). Inoltre +all'utente (in quanto la deallocazione avviene automaticamente). Inoltre siccome alcune implementazioni usano parte del buffer per mantenere delle informazioni di controllo, non è detto che le dimensioni dello stesso coincidano con quelle su cui viene effettuato l'I/O. @@ -1614,3 +1616,27 @@ che pu %%% mode: latex %%% TeX-master: "gapil" %%% End: + +% LocalWords: stream cap system call kernel Ritchie glibc descriptor Stevens +% LocalWords: buf read write filesystem st blksize stat sez l'header stdio BSD +% LocalWords: nell'header stdin shell stdout stderr error freopen flush line +% LocalWords: unbuffered buffered newline fully SVr fopen fdopen POSIX const +% LocalWords: char path int fildes NULL errno malloc fcntl fclose fflush tab +% LocalWords: dup fifo socket append EXCL ccs STRING IRUSR IWUSR IRGRP IWGRP +% LocalWords: IROTH IWOTH umask fseek fsetpos rewind SEEK CUR EOF EBADF close +% LocalWords: sync fcloseall SOURCE void stdlib of feof ferror clearerr l'I ws +% LocalWords: unlocked fread fwrite size ptr nmemb nelem gcc padding point str +% LocalWords: lock thread fgetc getc getchar dell'overhead altresì unsigned ap +% LocalWords: getwc fgetwc getwchar wint wchar WEOF putc fputc putchar dell'I +% LocalWords: SVID getw putw parsing peeking ahead ungetc gets fgets string +% LocalWords: overflow Aleph stack fputs puts fgetws fputws getline ssize leak +% LocalWords: realloc value result argument memory getdelim delim printf short +% LocalWords: fprintf sprintf format snprintf variadic long double intmax list +% LocalWords: uintmax ptrdiff vprintf vfprintf vsprintf vsnprintf asprintf lex +% LocalWords: vasprintf strptr dprintf vdprintf print scanf fscanf sscanf flex +% LocalWords: vscanf vfscanf vsscanf bison parser yacc like off VMS whence pos +% LocalWords: lseek ftell fgetpos fpos fseeko ftello fileno Solaris freadable +% LocalWords: fwritable ext freading fwriting buffering setvbuf BUFSIZ setbuf +% LocalWords: IONBF IOLBF IOFBF setbuffer setlinebuf flbf fbufsize flushlbf +% LocalWords: fsync fpurge flockfile ftrylockfile funlockfile SAFE FUNCTIONS +% LocalWords: locking fsetlocking type BYCALLER QUERY