X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=a7851b65ab0347b71be5be874181dce85a6225a7;hp=1581fbb97b146a1b5fb07e75af4549b850fc0b84;hb=45633dbe15fd23b17a975eb4d9c231d22a67ac00;hpb=eba75c4aaf390ff55ad6697ab80d4c1512ea2f39 diff --git a/fileadv.tex b/fileadv.tex index 1581fbb..a7851b6 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -2963,16 +2963,39 @@ l'argomento in sez.~\ref{sec:ipc_unix}). Dal punto di vista concettuale allora l'oggetto \textsl{buffer in kernel space}. Così se per una \textit{pipe} o una \textit{fifo} il buffer viene utilizzato -(come illustrato in fig.~\ref{fig:ipc_pipe_singular}) come area di memoria -dove appoggiare i dati che vengono trasferiti da un capo all'altro della -stessa, creando un meccanismo di comunicazione fra processi, nel caso di -\func{splice} il buffer viene usato o come fonte dei dati che con saranno -scritti su un file, o come destinazione dei dati che vengono letti da un file. - - - +come area di memoria dove appoggiare i dati che vengono trasferiti da un capo +all'altro della stessa (vedi fig.~\ref{fig:ipc_pipe_singular}) per creare un +meccanismo di comunicazione fra processi, nel caso di \funcd{splice} il buffer +viene usato o come fonte dei dati che saranno scritti su un file, o come +destinazione dei dati che vengono letti da un file. La funzione infatti è una +interfaccia generica che consente di trasferire dati da un buffer ad un file o +viceversa; il suo prototipo, accessibile solo avendo definito +\macro{\_GNU\_SOURCE},\footnote{ovviamente, essendo come detto la funzione + totalmente specifica di Linux, essa non è prevista da nessuno standard e + deve essere evitata se si vogliono scrivere programmi portabili.} è: +\begin{functions} + \headdecl{fcntl.h} + \funcdecl{} + + Trasferisce dati da un file verso una pipe o viceversa. + \bodydesc{La funzione restituisce il numero di byte trasferiti in caso di + successo e $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno + dei valori: + \begin{errlist} + \item[\errcode{EAGAIN}] si è impostata la modalità non bloccante su + \param{out\_fd} e la scrittura si bloccherebbe. + \item[\errcode{EINVAL}] i file descriptor non sono validi, o sono bloccati + (vedi sez.~\ref{sec:file_locking}), o \func{mmap} non è disponibile per + \param{in\_fd}. + \item[\errcode{EIO}] si è avuto un errore di lettura da \param{in\_fd}. + \item[\errcode{ENOMEM}] non c'è memoria sufficiente per la lettura da + \param{in\_fd}. + \end{errlist} + ed inoltre \errcode{EBADF} e \errcode{EFAULT}. + } +\end{functions}