Compare commits

..

No commits in common. "97f9196db681bba6674410917d728a35201e1cec" and "459cf8a8c8cec64ad0b3cb47b21fa699babf60a3" have entirely different histories.

10 changed files with 7 additions and 180 deletions

6
.gitignore vendored
View File

@ -14,7 +14,6 @@ main.pdf
main.toc
code/a.out
code/*.o
code/foo
code/thread-demo
code/ex_curses
@ -22,5 +21,6 @@ code/hello
code/arguments
code/no-op
code/get-signal
code/fifo-tx
code/fifo-rx

View File

@ -4,8 +4,7 @@
\textit{Inter Process Communication.}
Il existe deux familles bien distinctes. Nous allons donc
les voir dans le plus grand des désordres, en commençant
par les grands classiques.
les voir dans le plus grand des désordres.
% ================================================================
@ -69,84 +68,7 @@ Mémoire partagée.
% ================================================================
\section{named pipe} \label{named-pipe}
\index{fifo}
Un « FIFO » (ou « tube nommé ») peut être vu comme une sorte de
boite à lettres
dans laquelle on peut glisser un message à l'intention du
processus qui aura crée cette boite, avec un nom pré-défini afin
que l'expéditeur du message sache où le déposer.
\begin{quote}
A FIFO special file is similar to a pipe, except that it is created in a different way.
Instead of being an anonymous communications channel, a FIFO special file is entered
into the filesystem by calling mkfifo().
\end{quote}
Hop, une rapide démonstration. J'avais tout d'abors pensé à un
exemple minimaliste, puis je me suis dit~: « Et pourquoi ne pas
enmbarquer une charge utile dans le message ? », aussitôt dit
aussitôt fait.
L'émetteur mettra un \textsl{timestamp} dans le corps du message,
et le récepteur affichera l'écart avec le \textsl{timestamp} local.
Ce marqueur temporel sera obtenu par l'appel à
\texttt{gettimeofday(2)} \index{gettimeofday}
pour tenter d'avoir une précision
significative.
\subsection{Émetteur}
Son role est simple~: il met le timestamp dans l'enveloppe, et
la poste vers l'adresse qu'on lui passe sur la ligne de commande.
\lstinputlisting[language=c]{code/fifo-tx.c}
\subsection{Récepteur}
Pour faire simple, le récepteur des messages va passer l'intégralité
de son temps scotché devant la boite aux lettres, et attraper le
message dès son arrivée. Dans notre jargon, nous appellons ça
la méthode \textsl{buzzy-wait}.
Sauf que ça n'est pas tout à fait ça.
\lstinputlisting[language=c]{code/fifo-rx.c}
J'avoue ne pas avoir encore bien capté le deuxième argument
de mkfifo\dots
\subsection{Timestamp} \index{timestamp}
Comme promis un peu plus haut, le code est très simple.
\lstinputlisting[language=c]{code/dtime.c}
Cecit dit, la précision, ou plutôt la résolution,
est très dépendante du matériel,
de sa gestion par le système d'exploitation,
et et aussi\footnote{Mais faut-il s'étonner ?}
du \textsc{bofh} local.
\begin{quote}
The time returned by gettimeofday() is affected by discontinuous jumps
in the system time (e.g., if the system administrator manually changes
the system time). If you need a monotonically increasing clock, see
clock\_gettime(2).
\end{quote}
\subsection{Message}
Pour des raisons pas si évidente que ça, les messages transmis
doivent tous avoir la même taille. Nous allons donc définir
une structure (page ???) contenant les données à transmettre.
\lstinputlisting[language=c]{code/my-fifo.h}
C'est rudimentaire, mais ça fera l'affaire pour claquer un Bonaldi.
% ================================================================
\section{named pipe}
Tube nommé.

View File

@ -11,7 +11,7 @@ le graphique. Il ne nécessite pas de système d'exploitation.
La configuration de Dosbox est par défaut dans le fichier
\texttt{~/.dosbox/dosbox-0.74-2.conf}. Vous remarquerez
que le numéro de version est \textbf{dans} le nom de
ce fichier. Ce fichier est abondamment commenté.
ce fichier.
C'est à la fin de celui-ci, dans la section
\texttt{autoexec} que vous pouvez rajouter ce genre de lignes~:
@ -31,11 +31,6 @@ keyb fr
Écrit, sans le moindre doute, au « ras du métal ».
% ----------------------------------------------------------
\section{Fractint}
% ----------------------------------------------------------

View File

@ -4,11 +4,9 @@
\section{Flydraw}\index{Flydraw}
\begin{quote}
flydraw is a drawing tool based on an interpreter which parses a
language featuring rich graphic primitives; it uses libgd to output
GIF, JPEG, or PNG\index{PNG} files.
\end{quote}
% ------------------------------------------------

View File

@ -19,17 +19,5 @@ arguments: arguments.c Makefile
no-op: no-op.c Makefile
gcc -Wall $< -o $@
#------------- IPC
get-signal: get-signal.c Makefile
gcc -Wall $< -o $@
dtime.o: dtime.c my-fifo.h Makefile
gcc -Wall -c $<
fifo-tx: fifo-tx.c my-fifo.h dtime.o Makefile
gcc -Wall $< dtime.o -o $@
fifo-rx: fifo-rx.c my-fifo.h dtime.o Makefile
gcc -Wall $< dtime.o -o $@

View File

@ -1,9 +0,0 @@
#include <stddef.h>
#include <sys/time.h>
double dtime(void)
{
struct timeval tv;
gettimeofday(&tv, NULL);
return (double)tv.tv_sec + ((double)tv.tv_usec)/1e6;
}

View File

@ -1,27 +0,0 @@
/*** named pipe --- receiver ***/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h> /* for mkfifo */
#include <fcntl.h>
#include "my-fifo.h"
int main(int argc, char *argv[])
{
int fifo;
Message message;
double localTS;
if (argc!=2) exit(1);
fifo = mkfifo(argv[1], 0400);
if (fifo) {
perror("mkfifo fail");
exit(2);
}
read(fifo, &message, sizeof(Message));
localTS = dtime();
printf("%f %f\n", localTS, message.timestamp);
close(fifo);
return 0;
}

View File

@ -1,24 +0,0 @@
/*** named pipe --- transmiter ***/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include "my-fifo.h"
int main(int argc, char *argv[])
{
int fifo;
Message message;
if (argc!=2) exit(1);
if (-1==(fifo = open(argv[1], O_WRONLY))) {
perror("open fifo for wr");
exit(1);
}
message.pid = getpid();
message.timestamp = dtime();
write(fifo, &message, sizeof(Message));
close(fifo);
return 0;
}

View File

@ -1,9 +0,0 @@
gcc -std=c11 -pedantic -D_ANSI_SOURCE -fno-common \
-fno-diagnostics-show-option -fsanitize=undefined -Wbad-function-cast \
-Wstrict-prototypes -Wall -Wextra -Wformat-nonliteral -Wcast-align \
-Winline -Wundef -Wcast-qual -Wshadow -Wconversion -ffloat-store

View File

@ -1,7 +0,0 @@
typedef struct {
int pid;
double timestamp;
long notused;
} Message;
double dtime(void);