From: Simone Piccardi Date: Wed, 12 Dec 2001 23:02:25 +0000 (+0000) Subject: Riforma delle macro per le funzioni, si riformatta un bel po' di roba. X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=487b554b85cda92d10367d5af69a0355b9b2329d;p=gapil.git Riforma delle macro per le funzioni, si riformatta un bel po' di roba. --- diff --git a/filedir.tex b/filedir.tex index 7574ac9..46c502b 100644 --- a/filedir.tex +++ b/filedir.tex @@ -57,23 +57,23 @@ principali, come risultano dalla man page, sono le seguenti: Crea un nuovo collegamento diretto al file indicato da \var{oldpath} dandogli nome \var{newpath}. - La funzione restituisce zero in caso di successo e -1 in caso di errore. La - variabile \var{errno} viene settata opportunamente, i principali codici di - errore sono: + \bodydesc{La funzione restituisce zero in caso di successo e -1 in + caso di errore. La variabile \var{errno} viene settata + opportunamente, i principali codici di errore sono: \begin{errlist} - \item \macro{EXDEV} \var{oldpath} e \var{newpath} non sono sullo + \item[\macro{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo stesso filesystem. - \item \macro{EPERM} il filesystem che contiene \var{oldpath} e + \item[\macro{EPERM}] il filesystem che contiene \var{oldpath} e \macro{newpath} non supporta i link diretti o è una directory. - \item \macro{EEXIST} un file (o una directory) con quel nome esiste di + \item[\macro{EEXIST}] un file (o una directory) con quel nome esiste di già. - \item \macro{EMLINK} ci sono troppi link al file \var{oldpath} (il + \item[\macro{EMLINK}] ci sono troppi link al file \var{oldpath} (il numero massimo è specificato dalla variabile \macro{LINK\_MAX}, vedi \secref{sec:sys_limits}). \end{errlist} ed inoltre \macro{EACCES}, \macro{ENAMETOOLONG}, \macro{ENOTDIR}, \macro{EFAULT}, \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP}, - \macro{ENOSPC}, \macro{EIO}. + \macro{ENOSPC}, \macro{EIO}.} \end{prototype} La creazione di un nuovo collegamento diretto non copia il contenuto del file, @@ -115,21 +115,21 @@ suo prototipo dispositivo rimuove il nome, ma come per i file i processi che hanno aperto uno di questi oggetti possono continuare ad utilizzarlo. - La funzione restituisce zero in caso di successo e -1 per un errore, nel - qual caso il file non viene toccato. La variabile \var{errno} viene - settata secondo i seguenti codici di errore: + \bodydesc{La funzione restituisce zero in caso di successo e -1 per un + errore, nel qual caso il file non viene toccato. La variabile + \var{errno} viene settata secondo i seguenti codici di errore: \begin{errlist} - \item \macro{EISDIR} \var{pathname} si riferisce ad una directory + \item[\macro{EISDIR}] \var{pathname} si riferisce ad una directory (valore specifico ritornato da Linux che non consente l'uso di \var{unlink} con le directory, e non conforme allo standard POSIX, che prescrive invece l'uso di \macro{EPERM} in caso l'operazione non sia consentita o il processo non abbia privilegi sufficienti). - \item \macro{EROFS} \var{pathname} è su un filesystem montato in sola + \item[\macro{EROFS}] \var{pathname} è su un filesystem montato in sola lettura. - \item \macro{EISDIR} \var{pathname} fa riferimento a una directory. + \item[\macro{EISDIR}] \var{pathname} fa riferimento a una directory. \end{errlist} ed inoltre: \macro{EACCES}, \macro{EFAULT}, \macro{ENOENT}, \macro{ENOTDIR}, - \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP}, \macro{EIO}. + \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP}, \macro{EIO}.} \end{prototype} Per cancellare una voce in una directory è necessario avere il permesso di @@ -176,9 +176,10 @@ directory Cancella un nome dal filesystem. Usa \func{unlink} per i file e \func{rmdir} per le directory. - La funzione restituisce zero in caso di successo e -1 per un errore, nel - qual caso il file non viene toccato. Per i codici di errore vedi quanto - riportato nelle descrizioni di \func{unlink} e \func{rmdir}. + \bodydesc{La funzione restituisce zero in caso di successo e -1 per un + errore, nel qual caso il file non viene toccato. Per i codici di + errore vedi quanto riportato nelle descrizioni di \func{unlink} e + \func{rmdir}.} \end{prototype} Per cambiare nome ad un file o a una directory (che devono comunque essere @@ -192,28 +193,28 @@ nello stesso filesystem) si usa invece la funzione \func{rename}\footnote{la spostamento di un file fra directory diverse. Eventuali altri link diretti allo stesso file non vengono influenzati. - La funzione restituisce zero in caso di successo e -1 per un errore, nel - qual caso il file non viene toccato. La variabile \var{errno} viene settata - secondo i seguenti codici di errore: + \bodydesc{La funzione restituisce zero in caso di successo e -1 per un + errore, nel qual caso il file non viene toccato. La variabile + \var{errno} viene settata secondo i seguenti codici di errore: \begin{errlist} - \item \macro{EISDIR} \var{newpath} è una directory mentre \var{oldpath} non + \item[\macro{EISDIR}] \var{newpath} è una directory mentre \var{oldpath} non è una directory. - \item \macro{EXDEV} \var{oldpath} e \var{newpath} non sono sullo stesso + \item[\macro{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo stesso filesystem. - \item \macro{ENOTEMPTY} \var{newpath} è una directory già esistente e non + \item[\macro{ENOTEMPTY}] \var{newpath} è una directory già esistente e non vuota. - \item \macro{EBUSY} o \var{oldpath} o \var{newpath} sono in uso da parte di + \item[\macro{EBUSY}] o \var{oldpath} o \var{newpath} sono in uso da parte di qualche processo (come directory di lavoro o come radice) o del sistema (come mount point). - \item \macro{EINVAL} \var{newpath} contiene un prefisso di \var{oldpath} o + \item[\macro{EINVAL}] \var{newpath} contiene un prefisso di \var{oldpath} o più in generale si è cercato di creare una directory come sottodirectory di se stessa. - \item \macro{ENOTDIR} Uno dei componenti dei pathname non è una directory o + \item[\macro{ENOTDIR}] Uno dei componenti dei pathname non è una directory o \var{oldpath} è una directory e \var{newpath} esiste e non è una directory. \end{errlist} ed inoltre \macro{EACCESS}, \macro{EPERM}, \macro{EMLINK}, \macro{ENOENT}, - \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP} e \macro{ENOSPC}. + \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP} e \macro{ENOSPC}.} \end{prototype} Il comportamento della funzione è diverso a seconda che si voglia rinominare @@ -278,19 +279,20 @@ specificato. La funzione che permette di creare un nuovo link simbolico Crea un nuovo link simbolico di nome \func{newpath} il cui contenuto è \func{oldpath}. - La funzione restituisce zero in caso di successo e -1 per un errore, nel - qual caso la variabile \var{errno} restituisce i valori: + \bodydesc{La funzione restituisce zero in caso di successo e -1 per un + errore, nel qual caso la variabile \var{errno} restituisce i valori: \begin{errlist} - \item \macro{EPERM} il filesystem che contiene \var{newpath} non supporta i + \item[\macro{EPERM}] il filesystem che contiene \var{newpath} non supporta i link simbolici. - \item \macro{ENOENT} una componente di \var{newpath} non esiste o + \item[\macro{ENOENT}] una componente di \var{newpath} non esiste o \func{oldpath} è una stringa vuota. - \item \macro{EEXIST} esiste già un file \var{newpath}. - \item \macro{EROFS} \var{newpath} è su un filesystem montato in sola lettura. + \item[\macro{EEXIST}] esiste già un file \var{newpath}. + \item[\macro{EROFS}] \var{newpath} è su un filesystem montato in sola + lettura. \end{errlist} ed inoltre \macro{EFAULT}, \macro{EACCES}, \macro{ENAMETOOLONG}, \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, \macro{ENOSPC} e - \macro{EIO}. + \macro{EIO}.} \end{prototype} Si tenga presente che la funzione non effettua nessun controllo sull'esistenza @@ -356,18 +358,20 @@ la funzione \func{readlink}, il cui prototipo Legge il contenuto del link simbolico indicato da \var{path} nel buffer \var{buff} di dimensione \var{size}. - La funzione restituisce il numero di caratteri letti dentro \var{buff} o -1 - per un errore, nel qual caso la variabile \var{errno} viene settata a: + \bodydesc{La funzione restituisce il numero di caratteri letti dentro + \var{buff} o -1 per un errore, nel qual caso la variabile + \var{errno} viene settata a: \begin{errlist} - \item \macro{EINVAL} \var{file} non è un link simbolico o \var{size} non è + \item[\macro{EINVAL}] \var{file} non è un link simbolico o \var{size} non è positiva. - \item \macro{EROFS} La directory su cui si vuole inserire il nuovo link è + \item[\macro{EROFS}] La directory su cui si vuole inserire il nuovo link è su un filesystem montato in sola lettura. - \item \macro{ENOSPC} La directory o il filesystem in cui si vuole creare il + \item[\macro{ENOSPC}] La directory o il filesystem in cui si vuole creare il link è piena e non c'è ulteriore spazio disponibile. \end{errlist} ed inoltre \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT}, - \macro{EACCES}, \macro{ELOOP}, \macro{EIO}, \macro{EFAULT} e \macro{ENOMEM}. + \macro{EACCES}, \macro{ELOOP}, \macro{EIO}, \macro{EFAULT} e + \macro{ENOMEM}.} \end{prototype} La funzione apre il link simbolico, ne legge il contenuto, lo scrive nel @@ -437,24 +441,24 @@ prototipo della prima assegnandole i permessi indicati da \var{mode}. Il nome può essere indicato con il pathname assoluto o relativo. - La funzione restituisce zero in caso di successo e -1 per un errore, nel - qual caso \var{errno} assumerà i valori: + \bodydesc{La funzione restituisce zero in caso di successo e -1 per un + errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item \macro{EEXIST} Un file (o una directory) con quel nome esiste di già. - \item \macro{EACCESS} + \item[\macro{EEXIST}] Un file (o una directory) con quel nome esiste di già. + \item[\macro{EACCESS}] Non c'è il permesso di scrittura per la directory in cui si vuole inserire la nuova directory. - \item \macro{EMLINK} La directory in cui si vuole creare la nuova directory + \item[\macro{EMLINK}] La directory in cui si vuole creare la nuova directory contiene troppi file. Sotto Linux questo normalmente non avviene perché il filesystem standard consente la creazione di un numero di file maggiore di quelli che possono essere contenuti nel disco, ma potendo avere a che fare anche con filesystem di altri sistemi questo errore può presentarsi. - \item \macro{ENOSPC} Non c'è abbastanza spazio sul file system per creare + \item[\macro{ENOSPC}] Non c'è abbastanza spazio sul file system per creare la nuova directory o si è esaurita la quota disco dell'utente. \end{errlist} ed inoltre anche \macro{EPERM}, \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, - \macro{EROFS}. + \macro{EROFS}.} \end{prototype} La funzione crea una nuova directory vuota (che contiene solo le due voci @@ -473,23 +477,23 @@ suo prototipo deve essere vuota. Il nome può essere indicato con il pathname assoluto o relativo. - La funzione restituisce zero in caso di successo e -1 per un errore, nel - qual caso \var{errno} assumerà i valori: + \bodydesc{La funzione restituisce zero in caso di successo e -1 per un + errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item \macro{EPERM} Il filesystem non supporta la cancellazione di + \item[\macro{EPERM}] Il filesystem non supporta la cancellazione di directory, oppure la directory che contiene \var{dirname} ha lo sticky bit settato e l'\textit{effective user id} del processo non corrisponde al proprietario della directory. - \item \macro{EACCESS} Non c'è il permesso di scrittura per la directory che + \item[\macro{EACCESS}] Non c'è il permesso di scrittura per la directory che contiene la directory che si vuole cancellare, o non c'è il permesso di attraversare (esecuzione) una delle directory specificate in \var{dirname}. - \item \macro{EBUSY} La directory specificata è la directory di lavoro o la + \item[\macro{EBUSY}] La directory specificata è la directory di lavoro o la radice di qualche processo. - \item \macro{ENOTEMPTY} La directory non è vuota. + \item[\macro{ENOTEMPTY}] La directory non è vuota. \end{errlist} ed inoltre anche \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, - \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, \macro{EROFS}. + \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ELOOP}, \macro{EROFS}.} \end{prototype} La modalità con cui avviene la cancellazione è analoga a quella di @@ -546,18 +550,18 @@ apposita funzione di libreria, \func{getcwd}, il cui prototipo stringa puntata da \var{buffer}, che deve essere precedentemente allocata, per una dimensione massima di \var{size}. - La funzione restituisce il puntatore \var{buffer} se riesce, \macro{NULL} se - fallisce, in quest'ultimo caso la variabile \var{errno} è settata con i - seguenti codici di errore: + \bodydesc{La funzione restituisce il puntatore \var{buffer} se riesce, + \macro{NULL} se fallisce, in quest'ultimo caso la variabile + \var{errno} è settata con i seguenti codici di errore: \begin{errlist} - \item \macro{EINVAL} L'argomento \var{size} è zero e \var{buffer} non + \item[\macro{EINVAL}] L'argomento \var{size} è zero e \var{buffer} non è nullo. - \item \macro{ERANGE} L'argomento \var{size} è più piccolo della + \item[\macro{ERANGE}] L'argomento \var{size} è più piccolo della lunghezza del pathname. - \item \macro{EACCESS} Manca il permesso di lettura o di ricerca su uno dei + \item[\macro{EACCESS}] Manca il permesso di lettura o di ricerca su uno dei componenti del pathname (cioè su una delle directory superiori alla corrente). - \end{errlist} + \end{errlist}} \end{prototype} Il buffer deve essere sufficientemente lungo da poter contenere il pathname @@ -601,17 +605,17 @@ non solo tramite il filename, i prototipi di queste funzioni sono: \funcdecl{int fchdir (int fd)} Analoga alla precedente, ma usa un file descriptor invece del pathname. - Entrambe le funzioni restituiscono zero in caso di successo e -1 per un - errore, in caso di errore \var{errno} viene settata per \func{chdir} ai - valori: + \bodydesc{Entrambe le funzioni restituiscono zero in caso di successo + e -1 per un errore, in caso di errore \var{errno} viene settata per + \func{chdir} ai valori: \begin{errlist} - \item \macro{ENOTDIR} Uno dei componenti di \var{path} non è una directory. - \item \macro{EACCESS} Manca il permesso di ricerca su uno dei componenti di + \item[\macro{ENOTDIR}] Uno dei componenti di \var{path} non è una directory. + \item[\macro{EACCESS}] Manca il permesso di ricerca su uno dei componenti di \func{path}. \end{errlist} ed inoltre \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ELOOP} e \macro{EIO}. Per \func{fchdir} invece gli - errori sono \macro{EBADF} e \macro{EACCES}. + errori sono \macro{EBADF} e \macro{EACCES}.} \end{functions} @@ -654,10 +658,11 @@ queste funzioni sono i seguenti: eccetto che si usa con un file aperto, specificato tramite il suo file descriptor \var{filedes}. - Le funzioni restituiscono zero in caso di successo e -1 per un errore, in - caso di errore \var{errno} può assumere uno dei valori: \macro{EBADF}, - \macro{ENOENT}, \macro{ENOTDIR}, \macro{ELOOP}, \macro{EFAULT}, - \macro{EACCESS}, \macro{ENOMEM}, \macro{ENAMETOOLONG}. + \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per + un errore, in caso di errore \var{errno} può assumere uno dei + valori: \macro{EBADF}, \macro{ENOENT}, \macro{ENOTDIR}, + \macro{ELOOP}, \macro{EFAULT}, \macro{EACCESS}, \macro{ENOMEM}, + \macro{ENAMETOOLONG}.} \end{functions} La struttura \var{stat} è definita nell'header \file{sys/stat.h} e in @@ -835,22 +840,22 @@ dimensione si possono usare le due funzioni: eccetto che si usa con un file aperto, specificato tramite il suo file descriptor \var{fd}. - Le funzioni restituiscono zero in caso di successo e -1 per un errore, nel - qual caso \var{errno} viene settato opportunamente; per \func{ftruncate} si - hanno i valori: + \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per + un errore, nel qual caso \var{errno} viene settato opportunamente; + per \func{ftruncate} si hanno i valori: \begin{errlist} - \item \macro{EBADF} \var{fd} non è un file descriptor. - \item \macro{EINVAL} \var{fd} è un riferimento ad un socket, non a un file + \item[\macro{EBADF}] \var{fd} non è un file descriptor. + \item[\macro{EINVAL}] \var{fd} è un riferimento ad un socket, non a un file o non è aperto in scrittura. \end{errlist} per \func{truncate} si hanno: \begin{errlist} - \item \macro{EACCES} il file non ha permesso di scrittura o non si ha il + \item[\macro{EACCES}] il file non ha permesso di scrittura o non si ha il permesso di esecuzione una delle directory del pathname. - \item \macro{ETXTBSY} Il file è un programma in esecuzione. + \item[\macro{ETXTBSY}] Il file è un programma in esecuzione. \end{errlist} ed anche \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT}, - \macro{EROFS}, \macro{EIO}, \macro{EFAULT}, \macro{ELOOP}. + \macro{EROFS}, \macro{EIO}, \macro{EFAULT}, \macro{ELOOP}.} \end{functions} Se il file è più lungo della lunghezza specificata i dati in eccesso saranno @@ -1017,12 +1022,12 @@ Cambia i tempi di ultimo accesso e modifica dell'inode specificato da \var{filename} secondo i campi \var{actime} e \var{modtime} di \var{times}. Se questa è \macro{NULL} allora viene usato il tempo corrente. -La funzione restituisce zero in caso di successo e -1 in caso di errore, nel -qual caso \var{errno} è settata opportunamente. +\bodydesc{La funzione restituisce zero in caso di successo e -1 in caso + di errore, nel qual caso \var{errno} è settata opportunamente. \begin{errlist} -\item \macro{EACCESS} non si ha il permesso di scrittura sul file. -\item \macro{ENOENT} \var{filename} non esiste. -\end{errlist} +\item[\macro{EACCESS}] non si ha il permesso di scrittura sul file. +\item[\macro{ENOENT}] \var{filename} non esiste. +\end{errlist}} \end{prototype} La struttura \var{utimebuf} usata da \func{utime} è definita come: @@ -1455,16 +1460,16 @@ i loro prototipi sono: \funcdecl{int fchmod(int fd, mode\_t mode)} Analoga alla precedente, ma usa il file descriptor \var{fd} per indicare il file. - Le funzioni restituiscono zero in caso di successo e -1 per un errore, in - caso di errore \var{errno} può assumere i valori: + \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per + un errore, in caso di errore \var{errno} può assumere i valori: \begin{errlist} - \item \macro{EPERM} L'\textit{effective user id} non corrisponde a quello + \item[\macro{EPERM}] L'\textit{effective user id} non corrisponde a quello del proprietario del file o non è zero. \end{errlist} ed inoltre \macro{EROFS} e \macro{EIO}; \func{chmod} restituisce anche \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ENOTDIR}, \macro{EACCES}, \macro{ELOOP}; \func{fchmod} anche - \macro{EBADF}. + \macro{EBADF}.} \end{functions} I valori possibili per \var{mode} sono indicati in \ntab. I valori possono @@ -1589,17 +1594,17 @@ sono tre e i loro prototipi sono i seguenti: Le funzioni cambiano utente e gruppo di appartenenza di un file ai valori specificati dalle variabili \var{owner} e \var{group}. - - Le funzioni restituiscono zero in caso di successo e -1 per un errore, in - caso di errore \texttt{errno} viene settato ai valori: + + \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per + un errore, in caso di errore \texttt{errno} viene settato ai valori: \begin{errlist} - \item \macro{EPERM} L'\textit{effective user id} non corrisponde a quello + \item[\macro{EPERM}] L'\textit{effective user id} non corrisponde a quello del proprietario del file o non è zero, o utente e gruppo non sono validi \end{errlist} Oltre a questi entrambe restituiscono gli errori \macro{EROFS} e \macro{EIO}; \func{chown} restituisce anche \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ENOTDIR}, - \macro{EACCES}, \macro{ELOOP}; \func{fchown} anche \macro{EBADF}. + \macro{EACCES}, \macro{ELOOP}; \func{fchown} anche \macro{EBADF}.} \end{functions} In Linux soltanto l'amministratore può cambiare il proprietario di un file, diff --git a/filestd.tex b/filestd.tex index dcbb338..de338fe 100644 --- a/filestd.tex +++ b/filestd.tex @@ -223,15 +223,16 @@ prototipi sono: stream)} Apre il file specificato da \param{path} associandolo allo stream specificato da \param{stream}, se questo è già aperto prima lo chiude. - - Le funzioni ritornano un puntatore valido in caso di successo e \macro{NULL} - in caso di errore, in tal caso \var{errno} viene settata al valore ricevuto - dalla funzione sottostante di cui è fallita l'esecuzione. - Gli errori pertanto possono essere quelli di \func{malloc} per tutte e tre - le funzioni, quelli \func{open} per \func{fopen}, quelli di \func{fcntl} per - \func{fdopen} e quelli di \func{fopen}, \func{fclose} e \func{fflush} per - \func{freopen}. + \bodydesc{Le funzioni ritornano un puntatore valido in caso di + successo e \macro{NULL} in caso di errore, in tal caso \var{errno} + viene settata al valore ricevuto dalla funzione sottostante di cui è + fallita l'esecuzione. + + Gli errori pertanto possono essere quelli di \func{malloc} per tutte + e tre le funzioni, quelli \func{open} per \func{fopen}, quelli di + \func{fcntl} per \func{fdopen} e quelli di \func{fopen}, + \func{fclose} e \func{fflush} per \func{freopen}.} \end{functions} Normalmente la funzione che si usa per aprire uno stream è \func{fopen}, @@ -432,7 +433,7 @@ ogni volta che si chiama una funzione di libreria. Entrambi i flag (di errore e di end-of-file) possono essere cancellati usando la funzione \func{clearerr}, il cui prototipo è: -\begin{prototype}{stdio.h}{void clearerr( FILE *stream)} +\begin{prototype}{stdio.h}{void clearerr(FILE *stream)} Cancella i flag di errore ed end-of-file di \param{stream}. \end{prototype} \noindent in genere si usa questa funziona una volta che si sia identificata e @@ -568,10 +569,9 @@ gestione delle applicazioni multi-thread (si veda \label{sec:file_char_io} La seconda modalità di input/output è quella a caratteri, in cui si -trasferisce un carattere alla volta. - -Le funzioni per la lettura a caratteri sono tre, \func{fgetc}, -\func{getc} e \func{getchar}, i rispettivi prototipi sono: +trasferisce un carattere alla volta. Le funzioni per la lettura a +caratteri sono tre, \func{fgetc}, \func{getc} e \func{getchar}, i +rispettivi prototipi sono: \begin{functions} \headdecl{stdio.h} @@ -583,9 +583,9 @@ Le funzioni per la lettura a caratteri sono tre, \func{fgetc}, \funcdecl{int getchar(void)} è equivalente a \func{getc(stdin)}. - Tutte queste funzioni leggono un byte alla volta, che viene restituito - come intero; in caso di errore o fine del file il valore di ritorno è - \macro{EOF}. + \bodydesc{Tutte queste funzioni leggono un byte alla volta, che viene + restituito come intero; in caso di errore o fine del file il valore + di ritorno è \macro{EOF}.} \end{functions} A parte \func{getchar}, che si usa in genere per leggere un carattere da @@ -623,8 +623,8 @@ byte restituiscono un carattere in formato esteso (cio \funcdecl{wint\_t getwchar(void)} è equivalente a \func{getwc(stdin)}. - Tutte queste funzioni leggono un carattere alla volta, in caso di - errore o fine del file il valore di ritorno è \macro{WEOF}. + \bodydesc{Tutte queste funzioni leggono un carattere alla volta, in + caso di errore o fine del file il valore di ritorno è \macro{WEOF}.} \end{functions} Per scrivere un carattere si possono usare tre funzioni analoghe alle @@ -641,9 +641,9 @@ precedenti usate per leggere: \func{putc}, \func{fputc} e \funcdecl{int putchar(void)} è equivalente a \func{putc(stdin)}. -\item \noindent Le funzioni scrivono sempre un carattere alla volta, - il cui valore viene restituito in caso di successo; in caso di errore - o fine del file il valore di ritorno è \macro{EOF}. + \bodydesc{Le funzioni scrivono sempre un carattere alla volta, il cui + valore viene restituito in caso di successo; in caso di errore o + fine del file il valore di ritorno è \macro{EOF}.} \end{functions} Tutte queste funzioni scrivono sempre un byte alla volta, anche se @@ -666,13 +666,31 @@ loro prototipi sono: \funcdecl{int getw(FILE *stream)} Legge una parola da \param{stream}. \funcdecl{int putw(int w, FILE *stream)} Scrive la parola \param{w} su \param{stream}. - - Le funzioni restituiscono la parola \param{w}, o \macro{EOF} in caso - di errore o di fine del file. + + \bodydesc{Le funzioni restituiscono la parola \param{w}, o \macro{EOF} + in caso di errore o di fine del file.} \end{functions} -l'uso di queste funzioni è deprecato in favore dell'uso di \func{fread} -e \func{fwrite}, in quanto non è possibile distinguere il valore -1 da una -condizione di errore che restituisce \macro{EOF}. +\noindent l'uso di queste funzioni è deprecato in favore dell'uso di +\func{fread} e \func{fwrite}, in quanto non è possibile distinguere il +valore -1 da una condizione di errore che restituisce \macro{EOF}. + +Una degli usi più frequenti dell'input/output a caratteri è nei +programmi di \textit{parsing} in cui si analizza il testo; in questo +contesto diventa utile poter analizzare il carattere successivo da uno +stream senza estrarlo effettivamente (la tecnica è detta \textit{peeking + ahead}) in modo che il programma possa regolarsi sulla base avendo +dato una \textsl{sbirciatina} a quello che viene dopo. + +Nel nostro caso questo tipo di comportamento può essere realizzato prima +leggendo il carattere, e poi rimandandolo indietro, cosicchè ridiventi +disponibile per una lettura successiva; la funzione che inverte la +lettura si chiama \func{ungetc} ed il suo prototipo è: +\begin{prototype}{stdio.h}{int ungetc(int c, FILE *stream)} + Cancella i flag di errore ed end-of-file di \param{stream}. +\end{prototype} + + + \subsection{Input/output di linea} @@ -693,9 +711,9 @@ Le funzioni per leggere una linea sono sostazialmente due, \func{gets} e \funcdecl{char * fgets(char * string, int size, FILE *stream)} Scrive su \param{string} la linea letta da \param{stream} per un massimo di \param{size} byte. - - Le funzioni restituiscono della stringa letta o \macro{NULL} in caso - di errore. + + \bodydesc{Le funzioni restituiscono della stringa letta o \macro{NULL} + in caso di errore.} \end{functions} diff --git a/fileunix.tex b/fileunix.tex index 17a68ed..1fe5a7e 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -820,7 +820,7 @@ usare le due funzioni \func{fsync} e \func{fdatasync}, i cui prototipi sono: La funzione ritorna 0 in caso di successo e -1 in caso di errore, nel qual caso i codici restituiti in \var{errno} sono: \begin{errlist} - \item \macro{EINVAL} \param{fd} è un file speciale che non supporta la + \item[\macro{EINVAL}] \param{fd} è un file speciale che non supporta la sincronizzazione. \end{errlist} ed inoltre \macro{EBADF}, \macro{EROFS} e \macro{EIO}. @@ -849,14 +849,13 @@ comportamento analogo all'interno di uno stesso processo \textit{duplicando} un file descriptor. Per far questo si usa la funzione \func{dup} il cui prototipo è: \begin{prototype}{unistd.h}{int dup(int oldfd)} - La funzione crea una copia del file descriptor \param{oldfd}. La funzione ritorna il nuovo file descriptor in caso di successo e -1 in caso di errore, nel qual caso \var{errno} viene settata ad uno dei valori: \begin{errlist} - \item \macro{EBADF} \param{oldfd} non è un file aperto. - \item \macro{EMFILE} si è raggiunto il numero massimo consentito di file + \item[\macro{EBADF}] \param{oldfd} non è un file aperto. + \item[\macro{EMFILE}] si è raggiunto il numero massimo consentito di file descriptor aperti. \end{errlist} \end{prototype} diff --git a/macro.tex b/macro.tex index 632737d..c4fd579 100644 --- a/macro.tex +++ b/macro.tex @@ -67,27 +67,27 @@ tab.~\thechapter.\theusercount} \newenvironment{prototype}[2] {% defining what is done by \begin \center - \footnotesize \begin{minipage}[c]{14cm} - \par \texttt{\#include <#1>} -% \par \ - \par \texttt{#2} + \footnotesize + \begin{description*}{}{} + \item \texttt{\#include <#1>} + \item \texttt{#2} \par % \begin{lstlisting}{} % #1 % #2 % \end{lstlisting} - \begin{list}{}{} - \item } {% defining what is done by \end - \end{list} - \par -\par \texttt{ } -\end{minipage} -\normalsize +% \end{list} +% \par +\end{description*} +\end{minipage} +\vspace{6pt} \par +\normalsize } -\newenvironment{errlist}{\begin{description*}}{\end{description*}} +\newenvironment{errlist}{\begin{basedescript}{\desclabelwidth{1.5cm}}} +{\end{basedescript}} % % Slighty different envirnoment to be used for multi-header, @@ -95,6 +95,8 @@ tab.~\thechapter.\theusercount} % \newcommand{\headdecl}[1]{\item\texttt{\#include <#1>}} \newcommand{\funcdecl}[1]{\item\texttt{#1}\par} +\newcommand{\bodydesc}[1]{\par\end{description*}\par #1 +\begin{description*}{}{} \baselineskip=0pt\item} \newenvironment{functions} {% defining what is done by \begin \center @@ -104,7 +106,6 @@ tab.~\thechapter.\theusercount} } {% defining what is done by \end \end{description*} - \par \end{minipage} \vspace{6pt} \par diff --git a/process.tex b/process.tex index f0bc159..4278133 100644 --- a/process.tex +++ b/process.tex @@ -601,21 +601,22 @@ avere con le variabili automatiche, su cui torneremo in L'uso di queste funzioni è necessario solo quando si voglia accedere alle analoghe system call a cui fanno da interfaccia (ad esempio per implementare una propria versione di \func{malloc}. Le funzioni sono: -\begin{prototype}{unistd.h}{int *brk(void end\_data\_segment)} +\begin{functions} + \headdecl{unistd.h} + \funcdecl{int *brk(void end\_data\_segment)} Sposta la fine del segmento dei dati all'indirizzo specificato da \var{end\_data\_segment}. La funzione restituisce 0 in caso di successo e -1 in caso di fallimento, nel qual caso \var{errno} viene settata a \macro{ENOMEM}. -\end{prototype} -\begin{prototype}{unistd.h}{int *sbrk(ptrdiff\_t increment)} + \funcdecl{int *sbrk(ptrdiff\_t increment)} Incrementa lo spazio dati di un programma di \var{increment}. Un valore zero restituisce l'attuale posizione della fine del segmento dati. La funzione restituisce il puntatore all'inizio della nuova zona di memoria allocata in caso di successo e \macro{NULL} in caso di fallimento, nel qual caso \macro{errno} viene settata a \macro{ENOMEM}. -\end{prototype} +\end{functions} Queste funzioni sono state deliberatamente escluse dallo standard POSIX.1 e per i programmi normali è opportuno usare le funzioni di allocazione standard @@ -708,28 +709,23 @@ Le funzioni per bloccare e sbloccare singole sezioni di memoria sono \var{len} byte. Tutte le pagine che contengono una parte dell'intervallo sono mantenute in RAM per tutta la durata del blocco. - La funzione ritorna 0 in caso di successo e -1 in caso di errore, nel qual - caso \var{errno} è settata ad uno dei valori seguenti: - \begin{errlist} - \item \macro{ENOMEM} alcuni indirizzi dell'intervallo specificato non - corrispondono allo spazio di indirizzi del processo o si è ecceduto il - numero massimo consentito di pagine bloccate. - \item \macro{EPERM} il processo non ha i privilegi richiesti per - l'operazione. - \item \macro{EINVAL} \var{len} non è un valore positivo. - \end{errlist} - \funcdecl{int munlock(const void *addr, size\_t len)} Alloca \var{size} byte nello heap. La memoria non viene inizializzata. - Sblocca l'intervallo di memoria da \var{addr} per \var{len} byte. La - funzione ritorna 0 in caso di successo e -1 in caso di errore, nel qual caso - \var{errno} è settata ad uno dei valori seguenti: + Sblocca l'intervallo di memoria da \var{addr} per \var{len} byte. + + + \bodydesc{Entrambe le funzioni ritornano 0 in caso di successo e -1 in + caso di errore, nel qual caso \var{errno} è settata ad uno dei + valori seguenti: \begin{errlist} - \item \macro{ENOMEM} alcuni indirizzi dell'intervallo specificato non - corrispondono allo spazio di indirizzi del processo. - \item \macro{EINVAL} \var{len} non è un valore positivo. + \item[\macro{ENOMEM}] alcuni indirizzi dell'intervallo specificato non + corrispondono allo spazio di indirizzi del processo o si è ecceduto + il numero massimo consentito di pagine bloccate. + \item[\macro{EINVAL}] \var{len} non è un valore positivo. \end{errlist} + e, per \func{mlock}, anche \macro{EPERM} quando il processo non ha i + privilegi richiesti per l'operazione.} \end{functions} Altre due funzioni, \func{mlockall} e \func{munlockall}, consentono di @@ -742,12 +738,11 @@ queste funzioni sono: \funcdecl{int mlockall(int flags)} Blocca la paginazione per lo spazio di indirizzi del processo corrente. - Codici di ritorno ed errori sono gli stessi di \func{mlock}. - \funcdecl{int munlockall(void)} Sblocca la paginazione per lo spazio di indirizzi del processo corrente. - Codici di ritorno ed errori sono gli stessi di \func{munlock}. + \bodydesc{Codici di ritorno ed errori sono gli stessi di \func{mlock} + e \func{munlock}.} \end{functions} Il parametro \var{flags} di \func{mlockall} permette di controllarne il diff --git a/prochand.tex b/prochand.tex index 1592ce1..685827a 100644 --- a/prochand.tex +++ b/prochand.tex @@ -194,7 +194,7 @@ ottenuti da programma usando le funzioni: \funcdecl{pid\_t getppid(void)} restituisce il pid del padre del processo corrente. -Entrambe le funzioni non riportano condizioni di errore. +\bodydesc{Entrambe le funzioni non riportano condizioni di errore.} \end{functions} \noindent esempi dell'uso di queste funzioni sono riportati in \figref{fig:proc_fork_code}, nel programma di esempio \file{ForkTest.c}. @@ -238,10 +238,10 @@ prototipo della funzione ritorna -1 al padre (senza creare il figlio) in caso di errore; \texttt{errno} può assumere i valori: \begin{errlist} - \item \macro{EAGAIN} non ci sono risorse sufficienti per creare un'altro + \item[\macro{EAGAIN}] non ci sono risorse sufficienti per creare un'altro processo (per allocare la tabella delle pagine e le strutture del task) o si è esaurito il numero di processi disponibili. - \item \macro{ENOMEM} non è stato possibile allocare la memoria per le + \item[\macro{ENOMEM}] non è stato possibile allocare la memoria per le strutture necessarie al kernel per creare il nuovo processo. \end{errlist} \end{functions} @@ -563,9 +563,10 @@ le differenze fra padre e figlio dopo la \func{fork} invece sono: \item il \textit{process id}. \item il \textit{parent process id} (quello del figlio viene settato al \acr{pid} del padre). -\item i valori dei tempi di esecuzione (\var{tms\_utime}, \var{tms\_stime}, - \var{tms\_cutime}, \var{tms\_uetime}) che nel figlio sono posti a zero. -\item i \textit{file lock} (vedi \secref{sec:file_locking}, che non vengono ereditati dal figlio. +\item i valori dei tempi di esecuzione (vedi \secref{sec:sys_xxx}) che + nel figlio sono posti a zero. +\item i \textit{file lock} (vedi \secref{sec:file_locking}), che non + vengono ereditati dal figlio. \item gli allarmi ed i segnali pendenti (vedi \secref{sec:sig_xxx}), che per il figlio vengono cancellati. \end{itemize*} @@ -624,13 +625,15 @@ eseguite alla chiusura di un processo \item tutti i descrittori dei file sono chiusi. \item viene memorizzato lo stato di terminazione del processo. \item ad ogni processo figlio viene assegnato un nuovo padre. -\item viene inviato il segnale \macro{SIGCHLD} al processo padre. +\item viene inviato il segnale \macro{SIGCHLD} al processo padre (vedi + \secref{sec:sig_xxx}) . \item se il processo è un leader di sessione viene mandato un segnale di - \macro{SIGHUP} a tutti i processi in background e il terminale di controllo - viene disconnesso. -\item se la conclusione di un processo rende orfano un \textit{process group} - ciascun membro del gruppo viene bloccato, e poi gli vengono inviati in - successione i segnali \macro{SIGHUP} e \macro{SIGCONT}. + \macro{SIGHUP} a tutti i processi in background e il terminale di + controllo viene disconnesso (vedi \secref{sec:sess_xxx}). +\item se la conclusione di un processo rende orfano un \textit{process + group} ciascun membro del gruppo viene bloccato, e poi gli vengono + inviati in successione i segnali \macro{SIGHUP} e \macro{SIGCONT} + (vedi \secref{sec:sess_xxx}). \end{itemize*} ma al di la di queste operazioni è necessario poter disporre di un meccanismo ulteriore che consenta di sapere come questa terminazione è avvenuta; dato che @@ -777,29 +780,34 @@ prototipo \funcdecl{pid\_t wait(int * status)} Sospende il processo corrente finché un figlio non è uscito, o finché un -segnale termina il processo o chiama una funzione di gestione. Se un figlio è -già uscito la funzione ritorna immediatamente. Al ritorno lo stato di -termininazione del processo viene salvato nella variabile puntata da -\var{status} e tutte le informazioni relative al processo (vedi -\secref{sec:proc_termination}) vengono rilasciate. +segnale termina il processo o chiama una funzione di gestione. + +\bodydesc{ La funzione restituisce il \acr{pid} del figlio in caso di successo e -1 in caso di errore; \var{errno} può assumere i valori: \begin{errlist} - \item \macro{EINTR} la funzione è stata interrotta da un segnale. + \item[\macro{EINTR}] la funzione è stata interrotta da un segnale. \end{errlist} +} \end{functions} - +\noindent è presente fin dalle prime versioni di unix; la funzione ritorna alla -conclusione del primo figlio (o immediatamente se un figlio è già uscito). Nel -caso un processo abbia più figli il valore di ritorno permette di identificare -qual'è quello che è uscito. - -Questa funzione però ha il difetto di essere poco flessibile, in quanto -ritorna all'uscita di un figlio qualunque. Nelle occasioni in cui è necessario -attendere la conclusione di un processo specifico occorre predisporre un -meccanismo che tenga conto dei processi già terminati, e ripeta la chiamata -alla funzione nel caso il processo cercato sia ancora attivo. +conclusione del primo figlio (o immediatamente se un figlio è già +uscito). Se un figlio è già uscito la funzione ritorna immediatamente. + +Al ritorno lo stato di termininazione del processo viene salvato nella +variabile puntata da \var{status} e tutte le informazioni relative al +processo (vedi \secref{sec:proc_termination}) vengono rilasciate. Nel +caso un processo abbia più figli il valore di ritorno permette di +identificare qual'è quello che è uscito. + +Questa funzione ha il difetto di essere poco flessibile, in quanto +ritorna all'uscita di un figlio qualunque. Nelle occasioni in cui è +necessario attendere la conclusione di un processo specifico occorre +predisporre un meccanismo che tenga conto dei processi già terminati, e +provveda a ripetere la chiamata alla funzione nel caso il processo +cercato sia ancora attivo. Per questo motivo lo standard POSIX.1 ha introdotto la funzione \func{waitpid} che effettua lo stesso servizio, ma dispone di una serie di funzionalità più @@ -815,9 +823,9 @@ La funzione restituisce il \acr{pid} del processo che specificata l'opzione \macro{WNOHANG} e il processo non è uscito e -1 per un errore, nel qual caso \var{errno} assumerà i valori: \begin{errlist} - \item \macro{EINTR} se non è stata specificata l'opzione \macro{WNOHANG} e + \item[\macro{EINTR}] se non è stata specificata l'opzione \macro{WNOHANG} e la funzione è stata interrotta da un segnale. - \item \macro{ECHILD} il processo specificato da \var{pid} non esiste o non è + \item[\macro{ECHILD}] il processo specificato da \var{pid} non esiste o non è figlio del processo chiamante. \end{errlist} \end{functions} @@ -954,7 +962,7 @@ accessibili definendo la costante \macro{\_USE\_BSD}, sono: * rusage)} La funzione è identica a \func{waitpid} sia per comportamento che per i valori dei parametri, ma restituisce in \var{rusage} un sommario delle - risorse usate dal processo (per i dettagli vedi \secref{sec:xxx_limit_res}) + risorse usate dal processo (per i dettagli vedi \secref{sec:sys_xxx}) \funcdecl{pid\_t wait3(int *status, int options, struct rusage *rusage)} Prima versione, equivalente a \func{wait4(-1, \&status, opt, rusage)} è ormai deprecata in favore di \func{wait4}. @@ -962,7 +970,7 @@ accessibili definendo la costante \macro{\_USE\_BSD}, sono: \noindent la struttura \type{rusage} è definita in \file{sys/resource.h}, e viene utilizzata anche dalla funzione \func{getrusage} per ottenere le risorse di -sistema usate dal processo; in Linux è definita come: +sistema usate dal processo; la sua definizione è riportata in \nfig. \begin{figure}[!htb] \footnotesize \centering @@ -993,12 +1001,13 @@ struct rusage { delle risorse usate da un processo.} \label{fig:proc_rusage_struct} \end{figure} -In genere includere esplicitamente \file{} non è più necessario, -ma aumenta la portabilità, e serve in caso si debba accedere ai campi di -\var{rusage} definiti come \type{struct timeval}. La struttura è ripresa dalla -versione 4.3 Reno di BSD, attualmente (con il kernel 2.4.x) i soli campi che -sono mantenuti sono: \var{ru\_utime}, \var{ru\_stime}, \var{ru\_minflt}, -\var{ru\_majflt}, e \var{ru\_nswap}. + +In genere includere esplicitamente \file{} non è più +necessario, ma aumenta la portabilità, e serve in caso si debba accedere +ai campi di \var{rusage} definiti come \type{struct timeval}. La +struttura è ripresa da BSD 4.3, attualmente (con il kernel 2.4.x) i soli +campi che sono mantenuti sono: \var{ru\_utime}, \var{ru\_stime}, +\var{ru\_minflt}, \var{ru\_majflt}, e \var{ru\_nswap}. \subsection{Le funzioni \func{exec}} @@ -1019,37 +1028,40 @@ realt front-end a \func{execve}. Il prototipo di quest'ultima è: \begin{prototype}{unistd.h} {int execve(const char * filename, char * const argv [], char * const envp[])} + Esegue il programma contenuto nel file \param{filename}. - La funzione esegue il file o lo script indicato da \var{filename}, - passandogli la lista di argomenti indicata da \var{argv} e come ambiente la - lista di stringhe indicata da \var{envp}; entrambe le liste devono essere - terminate da un puntatore nullo. I vettori degli argomenti e dell'ambiente - possono essere acceduti dal nuovo programma quando la sua funzione - \func{main} è dichiarata nella forma \func{main(int argc, char *argv[], char - *envp[])}. - - La funzione ritorna -1 solo in caso di errore, nel qual caso caso la - \var{errno} può assumere i valori: + \bodydesc{La funzione ritorna -1 solo in caso di errore, nel qual caso + caso la \var{errno} può assumere i valori: \begin{errlist} - \item \macro{EACCES} il file non è eseguibile, oppure il filesystem è + \item[\macro{EACCES}] il file non è eseguibile, oppure il filesystem è montato in \cmd{noexec}, oppure non è un file normale o un interprete. - \item \macro{EPERM} il file ha i bit \acr{suid} o \acr{sgid} ma l'utente non + \item[\macro{EPERM}] il file ha i bit \acr{suid} o \acr{sgid} ma l'utente non è root o il filesystem è montato con \cmd{nosuid}, oppure - \item \macro{ENOEXEC} il file è in un formato non eseguibile o non + \item[\macro{ENOEXEC}] il file è in un formato non eseguibile o non riconosciuto come tale, o compilato per un'altra architettura. - \item \macro{ENOENT} il file o una delle librerie dinamiche o l'interprete + \item[\macro{ENOENT}] il file o una delle librerie dinamiche o l'interprete necessari per eseguirlo non esistono. - \item \macro{ETXTBSY} L'eseguibile è aperto in scrittura da uno o più + \item[\macro{ETXTBSY}] L'eseguibile è aperto in scrittura da uno o più processi. - \item \macro{EINVAL} L'eseguibile ELF ha più di un segmento - \macro{PF\_INTERP}, cioè chiede di essere eseguito da più di un interprete. - \item \macro{ELIBBAD} Un interprete ELF non è in un formato riconoscibile. + \item[\macro{EINVAL}] L'eseguibile ELF ha più di un segmento + \macro{PF\_INTERP}, cioè chiede di essere eseguito da più di un + interprete. + \item[\macro{ELIBBAD}] Un interprete ELF non è in un formato + riconoscibile. \end{errlist} ed inoltre anche \macro{EFAULT}, \macro{ENOMEM}, \macro{EIO}, \macro{ENAMETOOLONG}, \macro{E2BIG}, \macro{ELOOP}, \macro{ENOTDIR}, - \macro{ENFILE}, \macro{EMFILE}. + \macro{ENFILE}, \macro{EMFILE}.} \end{prototype} +La funzione \func{exec} esegue il file o lo script indicato da +\var{filename}, passandogli la lista di argomenti indicata da \var{argv} +e come ambiente la lista di stringhe indicata da \var{envp}; entrambe le +liste devono essere terminate da un puntatore nullo. I vettori degli +argomenti e dell'ambiente possono essere acceduti dal nuovo programma +quando la sua funzione \func{main} è dichiarata nella forma +\func{main(int argc, char *argv[], char *envp[])}. + Le altre funzioni della famiglia servono per fornire all'utente una serie possibile di diverse interfacce per la creazione di un nuovo processo. I loro prototipi sono: @@ -1066,9 +1078,9 @@ Sostituiscono l'immagine corrente del processo con quella indicata nel primo argomento. I parametri successivi consentono di specificare gli argomenti a linea di comando e l'ambiente ricevuti dal nuovo processo. -Queste funzioni ritornano solo in caso di errore, restituendo -1; nel qual -caso \var{errno} andrà ad assumere i valori visti in precedenza per -\func{execve}. +\bodydesc{Queste funzioni ritornano solo in caso di errore, restituendo + -1; nel qual caso \var{errno} andrà ad assumere i valori visti in + precedenza per \func{execve}.} \end{functions} Per capire meglio le differenze fra le funzioni della famiglia si può fare @@ -1347,7 +1359,7 @@ prototipi sono i seguenti: \funcdecl{gid\_t getegid(void)} restituisce l'\textit{effective group ID} del processo corrente. - \noindent Queste funzioni non riportano condizioni di errore. + \bodydesc{Queste funzioni non riportano condizioni di errore.} \end{functions} In generale l'uso di privilegi superiori deve essere limitato il più @@ -1408,8 +1420,8 @@ corrente. \funcdecl{int setgid(gid\_t gid)} setta il \textit{group ID} del processo corrente. -Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento: -l'unico errore possibile è \macro{EPERM}. +\bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso + di fallimento: l'unico errore possibile è \macro{EPERM}.} \end{functions} Il funzionamento di queste due funzioni è analogo, per cui considereremo solo @@ -1509,8 +1521,8 @@ specificati da \var{ruid} e \var{euid}. ID} e l'\textit{effective group ID} del processo corrente ai valori specificati da \var{rgid} e \var{egid}. -Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento: -l'unico errore possibile è \macro{EPERM}. +\bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso + di fallimento: l'unico errore possibile è \macro{EPERM}.} \end{functions} I processi non privilegiati possono settare i \textit{real id} soltanto ai @@ -1565,8 +1577,8 @@ e permettono un completo controllo su tutti gli identificatori (\textit{real}, ID} del processo corrente ai valori specificati rispettivamente da \var{rgid}, \var{egid} e \var{sgid}. -Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento: -l'unico errore possibile è \macro{EPERM}. +\bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso + di fallimento: l'unico errore possibile è \macro{EPERM}.} \end{functions} I processi non privilegiati possono cambiare uno qualunque degli @@ -1593,8 +1605,8 @@ processo corrente a \var{uid}. \funcdecl{int setegid(gid\_t gid)} setta l'\textit{effective group ID} del processo corrente a \var{gid}. -Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento: -l'unico errore possibile è \macro{EPERM}. +\bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso + di fallimento: l'unico errore possibile è \macro{EPERM}.} \end{functions} Gli utenti normali possono settare l'\textit{effective id} solo al valore del @@ -1637,8 +1649,8 @@ processo corrente a \var{fsuid}. \funcdecl{int setfsgid(gid\_t fsgid)} setta l'\textit{filesystem group ID} del processo corrente a \var{fsgid}. -Le funzioni restituiscono 0 in caso di successo e -1 in caso di fallimento: -l'unico errore possibile è \macro{EPERM}. +\bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 in caso + di fallimento: l'unico errore possibile è \macro{EPERM}.} \end{functions} Queste funzioni hanno successo solo se il processo chiamante ha i privilegi di diff --git a/system.tex b/system.tex index 6391861..bd5822b 100644 --- a/system.tex +++ b/system.tex @@ -18,7 +18,7 @@ varie risorse associate ad un processo ed i relativi limiti, e quelle relatica al sistema in quanto tale. - +\var{tms\_utime}, \var{tms\_stime}, \var{tms\_cutime}, \var{tms\_uetime} \section{La gestione dei tempi del sistema} \label{sec:sys_time}