tth 1 year ago
parent
commit
f5b9cf17dc
  1. 18
      chap/IPC.tex
  2. 2
      code/Makefile
  3. 2
      code/dtime.c
  4. 9
      code/fifo-rx.c
  5. 2
      code/fifo-tx.c

18
chap/IPC.tex

@ -96,6 +96,8 @@ Ce marqueur temporel sera obtenu par l'appel à @@ -96,6 +96,8 @@ Ce marqueur temporel sera obtenu par l'appel à
pour tenter d'avoir une précision
significative.
% ----------------------------------------------------------------
\subsection{Émetteur}
Son role est simple~: il met le timestamp dans l'enveloppe, et
@ -103,6 +105,11 @@ la poste vers l'adresse qu'on lui passe sur la ligne de commande. @@ -103,6 +105,11 @@ la poste vers l'adresse qu'on lui passe sur la ligne de commande.
\lstinputlisting[language=c]{code/fifo-tx.c}
Vous remarquerez que nous nettoyons le message avant utilisation
avec un \texttt{memset(3)}, une étape trop souvent oubliée.
% ----------------------------------------------------------------
\subsection{Récepteur}
Pour faire simple, le récepteur des messages va passer l'intégralité
@ -115,7 +122,12 @@ Sauf que ça n'est pas tout à fait ça. @@ -115,7 +122,12 @@ 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
de mkfifo, mais la lecture de
\texttt{fifo(7)} et de \texttt{pipe(7)} peut être
utile pour comprendre\footnote{modulo les références circulaires.}
la chose\dots
% ----------------------------------------------------------------
\subsection{Timestamp} \index{timestamp}
@ -136,6 +148,8 @@ the system time). If you need a monotonically increasing clock, see @@ -136,6 +148,8 @@ 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
@ -146,6 +160,8 @@ une structure (page ???) contenant les données à transmettre. @@ -146,6 +160,8 @@ une structure (page ???) contenant les données à transmettre.
C'est rudimentaire, mais ça fera l'affaire pour claquer un Bonaldi.
% ----------------------------------------------------------------
% ================================================================

2
code/Makefile

@ -24,6 +24,8 @@ no-op: no-op.c Makefile @@ -24,6 +24,8 @@ no-op: no-op.c Makefile
get-signal: get-signal.c Makefile
gcc -Wall $< -o $@
fifo: fifo-rx fifo-tx
dtime.o: dtime.c my-fifo.h Makefile
gcc -Wall -c $<

2
code/dtime.c

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
#include <stddef.h>
#include <sys/time.h>
#include "my-fifo.h"
double dtime(void)
{
struct timeval tv;

9
code/fifo-rx.c

@ -13,9 +13,12 @@ int fifo; @@ -13,9 +13,12 @@ int fifo;
Message message;
double localTS;
if (argc!=2) exit(1);
fifo = mkfifo(argv[1], 0400);
if (fifo) {
if (argc!=2) {
fprintf(stderr, "%s need a fifo name\n", argv[0]);
exit(1);
}
fifo = mkfifo(argv[1], O_RDONLY|O_CREAT);
if (-1==fifo) {
perror("mkfifo fail");
exit(2);
}

2
code/fifo-tx.c

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
/*** named pipe --- transmiter ***/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include "my-fifo.h"
@ -15,6 +16,7 @@ if (-1==(fifo = open(argv[1], O_WRONLY))) { @@ -15,6 +16,7 @@ if (-1==(fifo = open(argv[1], O_WRONLY))) {
perror("open fifo for wr");
exit(1);
}
memset(&message, 0, sizeof(Message));
message.pid = getpid();
message.timestamp = dtime();
write(fifo, &message, sizeof(Message));

Loading…
Cancel
Save