Merge branch 'master' of ssh://roach.truelite.it/srv/git/gapil
authorSimone Piccardi <piccardi@gnulinux.it>
Wed, 10 Jan 2024 11:12:23 +0000 (12:12 +0100)
committerSimone Piccardi <piccardi@gnulinux.it>
Wed, 10 Jan 2024 11:12:23 +0000 (12:12 +0100)
22 files changed:
build.tex
domandemanpages.txt
errors.tex
fileadv.tex
filedir.tex
fileio.tex
gapil.tex
intro.tex
ipc.tex
macro.tex
netlayer.tex
network.tex
othersock.tex
preambolo.tex
pref.tex
procadv.tex
session.tex
signal.tex
sockctrl.tex
sources/sigwait.c [new file with mode: 0644]
thread.tex
trasplayer.tex

index cec0b2db85a160121f3e283e6dceb636fba256d1..d515d78e1e5d1e42d684c4a23a8a81a48abcd3a8 100644 (file)
--- a/build.tex
+++ b/build.tex
@@ -1,6 +1,6 @@
 %% build.tex
 %%
-%% Copyright (C) 1999-2019 Simone Piccardi.  Permission is granted to copy,
+%% Copyright (C) 1999-2023 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",
index a06a041f982ff8732232914433c664a92fb2167b..1d2bba85abe679380694c98592b5cff8aa833baf 100644 (file)
@@ -6,3 +6,9 @@ Con readv/writev che fine ha fatto EOPNOTSUPP?
 tee ed il supporto per i socket ?
 
 openat e il supposto problema della race condition.
+
+
+Con sigwait si dice che viene restituito un valore positivo in caso di errore
+ma si elenca soltanto EINVAL, ma se si usa un puntatore non valido, che
+succede? Prima era elencato anche EFAULT, ora no. Dal codice sembrerebbe 
+
index b8b6a8fe264c779d153d257b6eca1367ea817d00..d3c8d8d3cbef078bf7a1d4665b3dcfd6b1a0dcab 100644 (file)
@@ -1,6 +1,6 @@
 %% errors.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
index 8e83df6b6fcfd70b0afad38f95bd7c41e1a6824d..189972a0124700178e4686901b613004ac0084d5 100644 (file)
@@ -1,6 +1,6 @@
 %% fileadv.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
@@ -3500,6 +3500,9 @@ raggruppati in un solo evento.
 % fanotify_mark() ha FAN_MARK_FILESYSTEM dal 4.20
 % fanotify() ha FAN_OPEN_EXEC dal 4.21/5.0
 % fanotify() ha FAN_REPORT_PIDFD dal 5.14
+% fanotify() ha FAN_FS_ERROR dal 5.16, vedi
+% https://docs.kernel.org/admin-guide/filesystem-monitoring.html 
+% fanotify() ha FAN_RENAME dal 5.17, vedi https://kernelnewbies.org/Linux_5.17
 
 
 \subsection{L'interfaccia POSIX per l'I/O asincrono}
index e1e89e9578daa481c2dfc700176f160cdb9c4c76..41f50a2c81844a8a1d28fc51dbf7856eb71f3cb3 100644 (file)
@@ -1,6 +1,6 @@
 %% filedir.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
@@ -1182,6 +1182,9 @@ utilizzati solo in fase di montaggio:
 %  * http://lwn.net/Articles/159077/ e
 %  * Documentation/filesystems/sharedsubtree.txt
 
+% TODO: (bassa priorità) trattare mount_setattr, vedi
+% https://lwn.net/Articles/896255/ 
+
 % TODO: (bassa priorità) non documentati ma presenti in sys/mount.h:
 %       * MS_POSIXACL
 %       * MS_KERNMOUNT
index f6305620b9426ac36594e44fc7ac552760a7def3..301b98de3048506bfd55196f0fe68845fe556273 100644 (file)
@@ -1,6 +1,6 @@
-s%% fileio.tex (merge fileunix.tex - filestd.tex)
+%% fileio.tex (merge fileunix.tex - filestd.tex)
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
@@ -557,6 +557,7 @@ escludere la possibilità di far esistere il file anche in un secondo tempo.
 
 % NOTE: per O_TMPFILE vedi: http://kernelnewbies.org/Linux_3.11
 % https://lwn.net/Articles/558598/ http://lwn.net/Articles/619146/
+% https://lwn.net/Articles/896153/
 
 
 \begin{table}[!htb]
@@ -1959,6 +1960,9 @@ aggiuntivo sono \textit{system call}, ad esempio \func{faccessat} e
 aderenza allo standard POSIX.1-2008, dato che la \textit{system call}
 sottostante non prevede l'argomento \param{flags}.
 
+% TODO: nel kernel 6.6 è stata introdotta fchmodat2 che risolve il problema
+% appena illustrato
+
 % TODO: aggiornare per via di faccessat2 aggiunta con il kernel 5.8
 
 In tab.~\ref{tab:at-functions_constant_values} si sono elencati i valori
index 3b1d0c97103962daae0711287dc9eb18f1b4af54..4ad87a0ed7205efdc143f32167e7a780a74bcaf2 100644 (file)
--- a/gapil.tex
+++ b/gapil.tex
@@ -1,6 +1,6 @@
 %% gapil.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.3 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
index 4059f5ea05c8fadaad46b3b9dc00b00a83e001ef..09298678ec964d9d8d004941a34e476aac69034d 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -1,6 +1,6 @@
 %% intro.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
diff --git a/ipc.tex b/ipc.tex
index 9e7e459e08ff4c2a508eb2c8d6ff4e2fc3266926..bd310d38a38e924b28943a2696c14006a125c85f 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -1,6 +1,6 @@
 %% ipc.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
@@ -5029,6 +5029,8 @@ testo alla terminazione di quest'ultimo.
 % https://lwn.net/Articles/178253/, https://lwn.net/Articles/823513/,
 % https://lwn.net/Articles/655044/ 
 
+% TODO: trattare futex_waitv, introdotta con il 5.16, vedi:
+% https://lwn.net/Articles/866112/ 
 
 
 % LocalWords:  like fifo System POSIX RPC Calls Common Object Request Brocker
index 3cd6b92c643399c7d855f5fe027b06e0b58ecee8..30d64fe64b49c84905d78afb18f8378282fdc86a 100644 (file)
--- a/macro.tex
+++ b/macro.tex
@@ -1,6 +1,6 @@
 %% macro.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
index 4ed5260559a9e947dcdc98a597731c35566238cc..633ffbcb584a7478ba915211aa1722cc0cda3c7e 100644 (file)
@@ -1,6 +1,6 @@
 %% netlayer.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
index dde8230c6171e0e27670efe095c373c0007cfb11..95f54f4846e178d5cd053fbc06ba4749dc2dcca7 100644 (file)
@@ -1,6 +1,6 @@
 %% network.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
index 325fb0d02745c2c674e6c05fbb35ca8d840c2ced..3772d68e5d34ecff8f72a5431f917e62f4c38d14 100644 (file)
@@ -1,6 +1,6 @@
 %% othersock.tex
 %%
-%% Copyright (C) 2004-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2004-2023 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",
@@ -801,6 +801,8 @@ stack dei protocolli.
 \subsection{I socket \textit{netlink}}
 \label{sec:socket_netlink}
 
+Vedi \url{https://docs.kernel.org/next/userspace-api/netlink/index.html} 
+
 
 \subsection{I \textit{packet socket}}
 \label{sec:packet_socket}
index 522eb139567002e742158b37fc13f42d96a48c10..a3f1175c5f43c4340e3b200701fa5814ad1e29a8 100644 (file)
@@ -1,6 +1,6 @@
 %% preambolo.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
index 4659e921032acbbe55cc55a15e8e3084534d65af..512fced5c90bda0b3d5dec143f83e1eae4d56044 100644 (file)
--- a/pref.tex
+++ b/pref.tex
@@ -1,6 +1,6 @@
 %% pref.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
index 69f81eae6cb3901347e6cf9734df92a8b2b6253a..d8314d74997475b4aff480c3cac122565b488d2a 100644 (file)
@@ -1360,6 +1360,10 @@ essere fornito in una forma di codice interpretabile fornito attraverso un
 socket o una \textit{pipe}, creati prima di lanciare il processo che eseguirà
 il codice non fidato. 
 
+% TODO: a partire dal kernel 6.6 è stato introdotto
+% SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP that indicates that events from the
+% watched process will be handled synchronously; that allows the kernel to
+% schedule the two processes more efficiently (da LWN)
 
 % TODO a partire dal kernel 3.5 è stato introdotto la possibilità di usare un
 % terzo argomento se il secondo è SECCOMP_MODE_FILTER, vedi
@@ -1906,6 +1910,10 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC.
 % TODO documentare PR_SET_SYSCALL_USER_DISPATCH in 5.11, vedi
 % https://lwn.net/Articles/826313/
 
+% TODO documentare PR_SET_MDWE in 6.3, vedi
+% https://git.kernel.org/linus/b507808ebce2
+
+
 \label{sec:prctl_operation}
 \end{basedescript}
 
@@ -2305,6 +2313,9 @@ Da fare
 % vedi anche l'ulteriore opzione "expedited" introdotta con il kernel 4.14
 % (https://lwn.net/Articles/728795/) 
 
+% TODO trattare process_mrelease introdotta con il kernel 5.16, vedi:
+% https://lwn.net/Articles/864184/ 
+
 
 
 %%% Local Variables:
index 639cf0dd90d7892a921f4737fcd7f647ef20d3d3..25c8146ee34376ec21d0e964ed0e2733dcd10c4e 100644 (file)
@@ -1,6 +1,6 @@
 %% session.tex
 %%
-%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2023 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",
@@ -44,9 +44,9 @@ Originariamente si trattava di dispositivi specifici (i terminali seriali, se
 non addirittura le telescriventi). Oggi questa interfaccia viene in genere
 emulata o tramite programmi o con le cosiddette console virtuali associate a
 monitor e tastiera, ma esiste sempre la possibilità di associarla direttamente
-ad alcuni dispositivi, come eventuali linee seriali, ed in certi casi, come
-buona parte dei dispositivi embedded su cui gira Linux (come router, access
-point, ecc.) questa resta anche l'unica opzione per una \textit{console} di
+a dispositivi specifici lelinee seriali, che in certi casi, come avviene per
+buona parte dei dispositivi embedded su cui gira Linux come router, access
+point, ecc. sono l'unica opzione per una avere una \textit{console} di
 sistema.
 
 
@@ -64,7 +64,7 @@ molti terminali in contemporanea da una singola postazione di lavoro, ma il
 sistema è nato prima dell'esistenza di tutto ciò.
 
 Il \textit{job control} è una caratteristica opzionale, introdotta in BSD
-negli anni '80, e successivamente standardizzata da POSIX.1. La sua
+negli anni '80, e successivamente standardizzata da POSIX.1; la sua
 disponibilità nel sistema è verificabile attraverso il controllo della macro
 \macro{\_POSIX\_JOB\_CONTROL}. In generale il \textit{job control} richiede il
 supporto sia da parte della shell (quasi tutte ormai lo hanno), che da parte
@@ -562,7 +562,7 @@ terminati.
 L'organizzazione del sistema del job control è strettamente connessa alle
 modalità con cui un utente accede al sistema per dare comandi, collegandosi ad
 esso con un terminale, che sia questo realmente tale, come un VT100 collegato
-ad una seriale o virtuale, come quelli associati a schermo e tastiera o ad una
+ad una seriale, o virtuale, come quelli associati a schermo e tastiera o ad una
 connessione di rete. Dato che i concetti base sono gli stessi, e dato che alla
 fine le differenze sono nel dispositivo cui il kernel associa i file standard
 (vedi tab.~\ref{tab:file_std_files}) per l'I/O, tratteremo solo il caso
@@ -695,12 +695,12 @@ Questi programmi, che devono essere eseguiti in modalità non interattiva e
 senza nessun intervento dell'utente, sono normalmente chiamati
 \textsl{demoni}, (o \textit{daemons}), nome ispirato dagli omonimi spiritelli
 della mitologia greca che svolgevano compiti che gli dei trovavano noiosi, di
-cui parla anche Socrate (che sosteneva di averne uno al suo servizio).
+cui parla anche Socrate, che sosteneva di averne uno al suo servizio.
 
 %TODO ricontrollare, i miei ricordi di filosofia sono piuttosto datati.
 
 Se però si lancia un programma demone dalla riga di comando in un sistema che
-supporta, come Linux, il \textit{job control} esso verrà comunque associato ad
+supporta il \textit{job control} come Linux, esso verrà comunque associato ad
 un terminale di controllo e mantenuto all'interno di una sessione, e anche se
 può essere mandato in background e non eseguire più nessun I/O su terminale,
 si avranno comunque tutte le conseguenze che abbiamo trattato in
@@ -823,7 +823,7 @@ differenti meccanismi come:
 le modalità con cui queste azioni vengono realizzate dipendono ovviamente dal
 demone che si usa, per la gestione del quale si rimanda ad un testo di
 amministrazione di sistema.\footnote{l'argomento è ad esempio coperto dal
-  capitolo 3.2.3 si \cite{AGL}.}
+  capitolo 3.2.3 di \cite{AGL}.}
 
 La \acr{glibc} definisce una serie di funzioni standard con cui un processo
 può accedere in maniera generica al servizio di \textit{syslog}, che però
@@ -1270,9 +1270,9 @@ al di fuori di questo.
 \label{sec:sess_terminal_io}
 
 Benché come ogni altro dispositivo i terminali siano accessibili come file,
-essi hanno assunto storicamente, essendo stati a lungo l'unico modo di
-accedere al sistema, una loro rilevanza specifica, che abbiamo già avuto modo
-di incontrare nella precedente sezione.
+essendo stati a lungo l'unico modo di accedere al sistema essi hanno assunto
+storicamente una loro rilevanza specifica, che abbiamo già avuto modo di
+incontrare nella precedente sezione.
 
 Esamineremo qui le peculiarità dell'I/O eseguito sui terminali, che per la
 loro particolare natura presenta delle differenze rispetto ai normali file su
index 63a940027b3d5c027e23e0f5d23bbfa596701d1a..e932644e2b9e32662439e5761788f7fa3e9c8bef 100644 (file)
@@ -2594,12 +2594,16 @@ prototipo è:
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
   caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
-  \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
-  \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
+  \item[\errcode{EFAULT}] l'indirizzo di \param{mask} non è valido.
+  \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
   \end{errlist}
 }
 \end{funcproto}
 
+La funzione imposta la maschera dei segnali indicata da \param{mask} e pone in
+attesa il processo. Ritorna solo con la ricezione di un segnale, con un errore
+di \errval{EINTR}, a meno che il segnale non termini il processo.
+
 Come esempio dell'uso di queste funzioni proviamo a riscrivere un'altra volta
 l'esempio di implementazione di \code{sleep}. Abbiamo accennato in
 sez.~\ref{sec:sig_sigaction} come con \func{sigaction} sia possibile bloccare
@@ -3017,11 +3021,10 @@ prima di queste è \funcd{sigwait}, il cui prototipo è:
 \fdecl{int sigwait(const sigset\_t *set, int *sig)}
 \fdesc{Attende la ricezione di un segnale.} 
 }
-{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
-  caso \var{errno} assumerà uno dei valori
+{La funzione ritorna $0$ in caso di successo ed un valore positivo in caso di
+  errore con valore secondo la lista seguente
   \begin{errlist}
-  \item[\errcode{EINTR}] la funzione è stata interrotta.
-  \item[\errcode{EINVAL}] si è specificato un valore non valido per
+  \item[\errcode{EINVAL}] \param{set} contiene un numero di segnale non valido 
   \end{errlist}
   ed inoltre \errval{EFAULT} nel suo significato generico.}
 \end{funcproto}
@@ -3095,14 +3098,6 @@ che venga eseguita l'azione predefinita, devono essere mascherati per tutti i
 \textit{thread}, compreso quello dedicato alla gestione, che potrebbe
 riceverlo fra due chiamate successive.
 
-Come esempio elementare dell'uso dei segnali \textit{real-time}, e della
-possibilità di inviare informazioni al gestore degli stessi con
-\func{sigqueue}, si è riportato in fig.~\ref{fig:sig_rtsival_main} il corpo
-principale di un programma elementare che legge dal terminale un valore
-numerico, ed utilizza un segnale \textit{real-time} per inviarlo al gestore
-dello stesso. Si sono trascurati i controlli dei valori di ritorno delle varie
-funzioni per brevità.
-
 \begin{figure}[!htb]
   \footnotesize \centering
   \begin{minipage}[c]{\codesamplewidth}
@@ -3114,11 +3109,19 @@ funzioni per brevità.
   \label{fig:sig_rtsival_main}
 \end{figure}
 
+Come esempio elementare dell'uso dei segnali \textit{real-time}, e della
+possibilità di inviare informazioni al gestore degli stessi con
+\func{sigqueue}, si è riportato in fig.~\ref{fig:sig_rtsival_main} il corpo
+principale di un programma elementare che legge dal terminale un valore
+numerico, ed utilizza un segnale \textit{real-time} per inviarlo al gestore
+dello stesso. Nel codice sono stati trascurati i controlli dei valori di
+ritorno delle varie funzioni per mantenere la brevità dell'esempio.
+
 Dopo aver definito (\texttt{\small 5}) una variabile \var{value} di tipo
-\type{sigval\_t} per inviare i dati, ed aver opportunamente scelto
+\type{sigval\_t} per poter inviare i dati, e dopo aver opportunamente scelto
 (\texttt{\small 6}) per \var{signo} un segnale \textit{real-time}, la parte
 iniziale del programma (\texttt{\small 8--11}) installa il relativo gestore
-(la cui definizione è riportata in fig.~\ref{fig:sig_rtsival_handl}), dopo di
+(la cui definizione è riportata in fig.~\ref{fig:sig_rtsival_handl}).  Dopo di
 che il programma si pone in un ciclo infinito (\texttt{\small 14--27}) in cui
 prima (\texttt{\small 15--20}) legge in buffer dallo \textit{standard input}
 una stringa immessa dall'utente, terminandola opportunamente (\texttt{\small
@@ -3128,6 +3131,10 @@ conversione ha successo e \texttt{value.sival\_int} è positivo) invia a se
 stesso (\texttt{\small 23}) il segnale \textit{real-time}, altrimenti stampa
 un avviso (\texttt{\small 24}).
 
+Alla ricezione del segnale il gestore si limita a stampare alcune delle
+informazioni ricevute nella struttura \struct{sigval\_t}, ed in particolare
+(\texttt{\small 5}) stampa tramite il valore del campo \var{si\_value} il
+numero che gli è stato inviato da \func{sigqueue}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -3135,14 +3142,12 @@ un avviso (\texttt{\small 24}).
     \includecodesample{listati/rtsigvalsend_handl.c}
   \end{minipage} 
   \normalsize 
-  \caption{Codice del gestore.}
+  \caption{Codice del gestore usato dal programma di
+    fig.~\ref{fig:sig_rtsival_main}.} 
   \label{fig:sig_rtsival_handl}
 \end{figure}
 
 
-
-
-
 \subsection{La gestione avanzata delle temporizzazioni}
 \label{sec:sig_timer_adv}
 
@@ -3191,20 +3196,6 @@ alta definizione però erano già presenti, essendo stata introdotte insieme ad
 altre funzioni per il supporto delle estensioni \textit{real-time} con il
 rilascio del kernel 2.6, ma la risoluzione effettiva era nominale.
 
-A tutte le implementazioni che si rifanno a queste estensioni è richiesto di
-disporre di una versione \textit{real-time} almeno per l'orologio generale di
-sistema, quello che mantiene il \textit{calendar time} (vedi
-sez.~\ref{sec:sys_time_base}), che in questa forma deve indicare il numero di
-secondi e nanosecondi passati a partire dal primo gennaio 1970 (\textit{The
-  Epoch}). Si ricordi infatti che l'orologio ordinario usato dal
-\textit{calendar time} riporta solo un numero di secondi, e che la risoluzione
-effettiva normalmente non raggiunge il nanosecondo (a meno di hardware
-specializzato).  Oltre all'orologio generale di sistema possono essere
-presenti altri tipi di orologi \textit{real-time}, ciascuno dei quali viene
-identificato da un opportuno valore di una variabile di tipo
-\type{clockid\_t}; un elenco di quelli disponibili su Linux è riportato in
-tab.~\ref{tab:sig_timer_clockid_types}.
-
 \begin{table}[htb]
   \footnotesize
   \centering
@@ -3262,6 +3253,19 @@ tab.~\ref{tab:sig_timer_clockid_types}.
   \label{tab:sig_timer_clockid_types}
 \end{table}
 
+A tutte le implementazioni che si rifanno a queste estensioni è richiesto di
+disporre di una versione \textit{real-time} almeno per l'orologio generale di
+sistema, quello che mantiene il \textit{calendar time} (vedi
+sez.~\ref{sec:sys_time_base}), che in questa forma deve indicare il numero di
+secondi e nanosecondi passati a partire dal primo gennaio 1970 (\textit{The
+  Epoch}). Si ricordi infatti che l'orologio ordinario usato dal
+\textit{calendar time} riporta solo un numero di secondi, e che la risoluzione
+effettiva normalmente non raggiunge il nanosecondo (a meno di hardware
+specializzato).  Oltre all'orologio generale di sistema possono essere
+presenti altri tipi di orologi \textit{real-time}, ciascuno dei quali viene
+identificato da un opportuno valore di una variabile di tipo
+\type{clockid\_t}; un elenco di quelli disponibili su Linux è riportato in
+tab.~\ref{tab:sig_timer_clockid_types}.
 
 % TODO: dal 4.17 CLOCK_MONOTONIC e CLOCK_BOOTTIME sono identici vedi
 % https://lwn.net/Articles/751651/ e
@@ -3331,17 +3335,17 @@ stata inizializzata con il valore che si vuole impostare sull'orologio, mentre
 per \func{clock\_gettime} verrà restituito al suo interno il valore corrente
 dello stesso.
 
-Si tenga presente inoltre che per eseguire un cambiamento sull'orologio
-generale di sistema \const{CLOCK\_REALTIME} occorrono i privilegi
-amministrativi;\footnote{ed in particolare la \textit{capability}
-  \const{CAP\_SYS\_TIME}.} inoltre ogni cambiamento ad esso apportato non avrà
-nessun effetto sulle temporizzazioni effettuate in forma relativa, come quelle
-impostate sulle quantità di \textit{process time} o per un intervallo di tempo
-da trascorrere, ma solo su quelle che hanno richiesto una temporizzazione ad
-un istante preciso (in termini di \textit{calendar time}). Si tenga inoltre
-presente che nel caso di Linux \const{CLOCK\_REALTIME} è l'unico orologio per
-cui si può effettuare una modifica, infatti nonostante lo standard preveda la
-possibilità di modifiche anche per \const{CLOCK\_PROCESS\_CPUTIME\_ID} e
+Per eseguire un cambiamento sull'orologio generale di sistema
+\const{CLOCK\_REALTIME} occorrono i privilegi amministrativi;\footnote{ed in
+  particolare la \textit{capability} \const{CAP\_SYS\_TIME}.} e che ogni
+cambiamento ad esso apportato non avrà nessun effetto sulle temporizzazioni
+effettuate in forma relativa, come quelle impostate sulle quantità di
+\textit{process time} o per un intervallo di tempo da trascorrere, ma solo su
+quelle che hanno richiesto una temporizzazione ad un istante preciso (in
+termini di \textit{calendar time}). Si tenga inoltre presente che nel caso di
+Linux \const{CLOCK\_REALTIME} è l'unico orologio per cui si può effettuare una
+modifica, infatti nonostante lo standard preveda la possibilità di modifiche
+anche per \const{CLOCK\_PROCESS\_CPUTIME\_ID} e
 \const{CLOCK\_THREAD\_CPUTIME\_ID}, il kernel non le consente.
 
 Oltre alle due funzioni precedenti, lo standard POSIX prevede una terza
@@ -3377,16 +3381,15 @@ voglia utilizzare nelle funzioni di impostazione che non corrisponda ad un
 multiplo intero di questa risoluzione, sarà troncato in maniera automatica. 
 
 Gli orologi elencati nella seconda sezione di
-tab.~\ref{tab:sig_timer_clockid_types} sono delle estensioni specifiche di
-Linux, create per rispondere ad alcune esigenze specifiche, come quella di
-tener conto di eventuali periodi di sospensione del sistema, e presenti solo
-nelle versioni più recenti del kernel. In particolare gli ultimi due,
-contraddistinti dal suffisso \texttt{\_ALARM}, hanno un impiego particolare,
-derivato dalle esigenze emerse con Android per l'uso di Linux sui cellulari,
-che consente di creare timer che possono scattare, riattivando il sistema,
-anche quando questo è in sospensione. Per il loro utilizzo è prevista la
-necessità di una capacità specifica, \const{CAP\_WAKE\_ALARM} (vedi
-sez.~\ref{sec:proc_capabilities}).
+tab.~\ref{tab:sig_timer_clockid_types} sono estensioni specifiche di Linux
+presenti solo nelle versioni più recenti del kernel, create per rispondere ad
+alcune esigenze specifiche come quella di tener conto di eventuali periodi di
+sospensione del sistema. In particolare gli ultimi due, contraddistinti dal
+suffisso \texttt{\_ALARM}, hanno un impiego particolare derivato dalle
+esigenze emerse con Android per l'uso di Linux sui cellulari, che consente di
+creare timer che possono scattare, riattivando il sistema, anche quando questo
+è in sospensione. Per il loro utilizzo è prevista la necessità di una capacità
+specifica, \const{CAP\_WAKE\_ALARM} (vedi sez.~\ref{sec:proc_capabilities}).
 
 Si tenga presente inoltre che con l'introduzione degli \textit{high resolution
   timer} i due orologi \const{CLOCK\_PROCESS\_CPUTIME\_ID} e
@@ -3888,10 +3891,10 @@ anch'essa introdotta dallo standard POSIX.1, il suo prototipo è:
 La funzione permette di ricavare quali sono i segnali pendenti per il processo
 in corso, cioè i segnali che sono stati inviati dal kernel ma non sono stati
 ancora ricevuti dal processo in quanto bloccati. Non esiste una funzione
-equivalente nella vecchia interfaccia, ma essa è tutto sommato poco utile,
-dato che essa può solo assicurare che un segnale è stato inviato, dato che
-escluderne l'avvenuto invio al momento della chiamata non significa nulla
-rispetto a quanto potrebbe essere in un qualunque momento successivo.
+equivalente nella vecchia interfaccia, ma essa, potendo solo assicurare che un
+segnale è stato inviato, è tutto sommato poco utile dato che escluderne
+l'avvenuto invio al momento della chiamata non significa nulla rispetto a
+quanto potrebbe accadere in un qualunque momento successivo.
 
 Una delle caratteristiche di BSD, disponibile anche in Linux, è la possibilità
 di usare uno \textit{stack} alternativo per i segnali; è cioè possibile fare
index 9d5279e6ab62856b34ff617697608b440c23c03e..17514f51a41562874d4e40f82f290d1b14df204f 100644 (file)
@@ -2669,8 +2669,10 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
 \item[\constd{SO\_TYPE}] questa opzione permette di leggere il tipo di socket
   su cui si opera; funziona solo con \func{getsockopt}, ed utilizza per
   \param{optval} un intero in cui verrà restituito il valore numerico che lo
-  identifica (ad esempio \const{SOCK\_STREAM}). 
-
+  identifica (ad esempio \const{SOCK\_STREAM}).
+  
+% TODO verificare IP_LOCAL_PORT_RANGE, aggiunta con il 6.3
+% vedi https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=91d0b78c5177
 
 \end{basedescript}
 
diff --git a/sources/sigwait.c b/sources/sigwait.c
new file mode 100644 (file)
index 0000000..7dcc983
--- /dev/null
@@ -0,0 +1,66 @@
+/* sigwait.c
+ * 
+ * Copyright (C) 2021 Simone Piccardi
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+/****************************************************************
+ *
+ * Program sigwait.c: 
+ * Test program for sigwait function
+ *
+ * Author: Simone Piccardi
+ * Nov. 2021
+ *
+ ****************************************************************/
+/* 
+ * Include needed headers
+ */
+#define _GNU_SOURCE
+#include <unistd.h>      /* unix standard library */
+#include <signal.h>      /* signal constants, types and functions */
+#include <errno.h>       /* error definitions and routines */ 
+#include <stdlib.h>      /* C standard library */
+#include <unistd.h>      /* unix standard library */
+#include <stdio.h>      /* standard I/O library */
+#include <string.h>      /* C strings library */
+
+int main(int argc, char *argv[])
+{
+/* 
+ * Variables definition  
+ */
+    int i;
+    pid_t pid = 0;
+    int sig,res;
+    sigset_t set;
+
+    sigemptyset(&set);
+    sigaddset(&set, SIGALRM);
+//    while (1) {
+    res=sigwait(&set, &sig);
+    printf("Sig was %d", sig);
+    if ( res > 0) {
+       printf("Errno was %d", errno);
+       perror("errore");
+       printf("Result was %d", res);
+       printf("Error by res was %s", strerror(res));
+       exit(11);
+    } else {
+       printf("Result was %d", res);
+       printf("Normal exit");
+    }
+//    }
+}
index 62f4dfdf7e9bc388c02835965d9a36b120d6c0d5..afb1b62147def3761350b6fd56f2725151449662 100644 (file)
@@ -1,6 +1,6 @@
 %% thread.tex
 %%
-%% Copyright (C) 2007-2019 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2007-2023 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",
index 97b0efb7eaf28755b8d2ed3d428fbaed5100b823..978e9bb708941e18fc6a5e24ff3ef2dc0444d268 100644 (file)
@@ -1,6 +1,6 @@
 %% tcpprot.tex
 %%
-%% Copyright (C) 2002-2019 Simone Piccardi.  Permission is granted to copy,
+%% Copyright (C) 2002-2023 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",