From f53ee92b0251b869883c3510168afaba6516bcae Mon Sep 17 00:00:00 2001 From: tTh Date: Thu, 22 Feb 2024 20:08:21 +0100 Subject: [PATCH] add advanced section --- chap/C.tex | 59 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/chap/C.tex b/chap/C.tex index 5e1a07c..ec61a30 100644 --- a/chap/C.tex +++ b/chap/C.tex @@ -311,7 +311,7 @@ int fprintf(FILE *stream, const char *format, ...); % ========================================================= -\section{Un filtre Unix}\label{filtre-unix} +\section{Quelques filtres Unix}\label{filtre-unix} Ce qu'on appelle un "filtre" est un logiciel destiné à transformer les données qui le traversent. Pour bien comprendre, le mieux, @@ -336,14 +336,21 @@ $ \end{verbatim} Vous voulez un autre exemple ? En voici un, parfois utile pour des -simulations de terminal de \textsl{h4ck3rZ}\footnote{texte vert ou -orange sur fond noir de rigueur.} sur une ligne en boucle de +simulations de terminal de \textsl{tipiak}\footnote{Le texte vert ou +orange sur fond noir est de rigueur.} sur une ligne en boucle de courant à 300 Bauds, le tout pour un film que l'on souhaite classable en série Z. \lstinputlisting[language=c]{code/C/slowprint.c} +% \vspace{2em} + +Vous prendrez bien soin de contempler le traitement d'un éventuel +paramètre passé par la ligne de commande, +et surtout le calcul alambiqué\footnote{On doit quand même +pouvoir faire plus clair\dots} +pour convertir une vitesse en Bauds à un délay acceptable +par \texttt{nanosleep(2)}. -\vspace{2em} Pour une explication plus détaillée sur les mécanismes utilisés et les usages possibles d'un tel filtre, il faut voir le concept de pipeline du shell en @@ -684,6 +691,47 @@ types of devices. % XXX EXEMPLE TROP MINIMALISTE !!! % +% ========================================================= +% +% Message-ID: +% +\section{Advanced} + +Direct from Usenet (\texttt{comp.lang.c}): +\textsl{I did an experiment where is possible to create "sets" of warnings.} + +\begin{verbatim} +#define SAFE_REGION \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic error \"-Wenum-compare\"")\ + _Pragma("GCC diagnostic error \"-Wparentheses\"")\ + _Pragma("GCC diagnostic error \"-Wuninitialized\"") +#define RESTORE \ + _Pragma("GCC diagnostic pop") +enum E1 { A }; +enum E2 { B }; +SAFE_REGION +int main() { + int a, b; + if (a = b){} + if (A == B){} +} +RESTORE +\end{verbatim} + +\begin{quote} +J'avoue avoir mis un certain temps à capter. Je vais attendre +le \textsl{follow-up} de Bart pour avoir confirmation. +\end{quote} +% ========================================================= + +\section{La suite?} + +% Message-ID: <657f1dd4$0$10079$426a74cc@news.free.fr> +% NNTP-Posting-Date: 17 Dec 2023 17:12:04 CET + +Étudier les différents modêles de mémoire partagée. + % ========================================================= \section{Ailleurs dans cet ouvrage} @@ -693,7 +741,8 @@ divers comme Open Sound Control (page \pageref{chap:OSC}) ou libsndfile (page \pageref{chap:son}). Et pour les gens du système~: l'utilisation des signaux (page \pageref{get-signal}), -le chargement dynamique d'un \textsl{plug-in} (page \pageref{ex_dlopen}). +le chargement dynamique d'un \textsl{plug-in} (page \pageref{ex_dlopen}), +les \texttt{ioctl}, \dots % =========================================================