\chapter{IPC} \index{IPC} \label{chap:IPC} \textit{Inter Process Communication.} Il existe deux familles bien distinctes. Nous allons donc les voir dans le plus grand des désordres. % ================================================================ \section{Signal} \index{signal} nous allonc commencer par le plus simple mécanisme d'IPC~: le signal. Et pour ça, nous allons utiliser (encore une fois ?) un exemple futile, certes, mais simple à comprendre. Nous avons un programme qui tourne en boucle en effectuant des taches complexes (simulées pour l'exemple par une nanosieste) et nous souhaitons pouvoir lui demander d'afficher l'avancée de la chose. \label{get-signal} \lstinputlisting[language=c]{code/get-signal.c} Quand ce processus recevra le signal, la fonction \texttt{attraper} sera appelée de façon \textsl{asynchrone} et positionnera le drapeau. C'est dans le terme \textsl{asynchrone} que le diable a caché les détails. \begin{verbatim} fubar $ ./get-signal & [1] 14001 fubar $ kill me, my pid is 14001 kill -USR1 14001 fubar $ count is 22 kill %1 fubar $ [1]+ Terminated ./get-signal fubar $ \end{verbatim} Comme on peut le constater, le principe est simple. Un signal est une interruption d'un processus qui, en dehors de sa présence, ne transfère que peu d'information. Le principe est simple, d'accord, mais la mise en œuvre l'est moins. Cet exemple peut être considéré comme obsolète, et la \textsl{manpage}\footnote{Mais qui lit le man, de nos jours ?} confime bien. \begin{quote} The only portable use of signal() is to set a signal's disposition to SIG\_DFL or SIG\_IGN. The semantics when using signal() to establish a signal handler vary across systems (and POSIX.1 explicitly permits this variation); \textbf{do not use it for this purpose}. \end{quote} Vous voilà prévenus, la suite bientôt\dots % ================================================================ % ================================================================ \section{shared memory} \index{shared} Mémoire partagée. % ================================================================ \section{named pipe} Tube nommé.