From f5b9cf17dcab4f61d053caf309266092931fcc61 Mon Sep 17 00:00:00 2001 From: tth Date: Sat, 28 Aug 2021 17:06:26 +0200 Subject: [PATCH] bla --- chap/IPC.tex | 18 +++++++++++++++++- code/Makefile | 2 ++ code/dtime.c | 2 +- code/fifo-rx.c | 9 ++++++--- code/fifo-tx.c | 2 ++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/chap/IPC.tex b/chap/IPC.tex index 0ee3a13..8b85021 100644 --- a/chap/IPC.tex +++ b/chap/IPC.tex @@ -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. \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. \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 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. C'est rudimentaire, mais ça fera l'affaire pour claquer un Bonaldi. +% ---------------------------------------------------------------- + % ================================================================ diff --git a/code/Makefile b/code/Makefile index f118b4a..03c180b 100644 --- a/code/Makefile +++ b/code/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 $< diff --git a/code/dtime.c b/code/dtime.c index 8d116f8..149ce5e 100644 --- a/code/dtime.c +++ b/code/dtime.c @@ -1,6 +1,6 @@ #include #include - +#include "my-fifo.h" double dtime(void) { struct timeval tv; diff --git a/code/fifo-rx.c b/code/fifo-rx.c index 29a9440..b7e1792 100644 --- a/code/fifo-rx.c +++ b/code/fifo-rx.c @@ -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); } diff --git a/code/fifo-tx.c b/code/fifo-tx.c index 72967c7..7196cd9 100644 --- a/code/fifo-tx.c +++ b/code/fifo-tx.c @@ -1,6 +1,7 @@ /*** named pipe --- transmiter ***/ #include #include +#include #include #include #include "my-fifo.h" @@ -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));