Sujet
Écrire un programme en C qui crée deux processus communiquant par tube. Le processus fils lit sur l'entrée standard et le processus père affiche ce qui a été lu sur l'entrée standard en remplaçant les majuscules par des minuscules.
#include <stdlib.h> #include <stdio.h> #include <unistd.h>#define MAX 64
char majmin(char c) { if (c >= 'A' && c <= 'Z') { return c + ('a' - 'A'); } else { return c; } }
/** Tube * T[1] |===================| T[0] * | | * | | * +-----|Tampon| |Tampon| * | +---------| * +-----+ + * |-|-|-| <------- Clavier Écran --------> |o| * +-----+ * * fils père */ int main() { int pid, T[2], n, i, status; char tampon[MAX];
if (pipe(T) == -1) { perror("Erreur de pipe"); exit(1); }
pid = fork();
if (pid < 0) { perror("Erreur lors de la creation du processus"); exit(1); }
if (pid == 0) { close(T[0]);
<span class="k">while</span> <span class="p">((</span><span class="n">n</span> <span class="o">=</span> <span class="n">read</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">tampon</span><span class="p">,</span> <span class="n">MAX</span><span class="p">)))</span> <span class="n">write</span><span class="p">(</span><span class="n">T</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">tampon</span><span class="p">,</span> <span class="n">n</span><span class="p">);</span>
} else { close(T[1]);
<span class="k">while</span> <span class="p">((</span><span class="n">n</span> <span class="o">=</span> <span class="n">read</span><span class="p">(</span><span class="n">T</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">tampon</span><span class="p">,</span> <span class="n">MAX</span><span class="p">)))</span> <span class="p">{</span> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">n</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="n">tampon</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">majmin</span><span class="p">(</span><span class="n">tampon</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> <span class="n">write</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">tampon</span><span class="p">,</span> <span class="n">n</span><span class="p">);</span> <span class="c1">// Simplement utilisé pour récupérer le code retour</span> <span class="c1">// de l'exécution du processus fils.</span> <span class="n">wait</span><span class="p">(</span><span class="o">&</span><span class="n">status</span><span class="p">);</span> <span class="p">}</span> <span class="n">close</span><span class="p">(</span><span class="n">T</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span>
} }