Sujet
Faire un programme:
./a.out fichier1 fichier2
Il faut qu'il y ait deux processus qui travaillent sur le même tampon (tube) en parralèle.
#include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>/ * T[1] T[0] * +---------------|===============|----------+ * | | * +--------+ +--------+ * | Tampon | | Tampon | * +--------+ +--------+ * | | * |Fichier 1| |Fichier 2| * * fils père */ int main(int argc, char argv) { int pid, n, x, des1, des2, T[2]; char tampon[255]; struct stat s1;
if (argc < 3) { perror("Nombre d'arguments insuffisant."); exit(1); }
if (pipe(T) == -1) { perror("Erreur de tube."); exit(1); }
pid = fork();
if (pid < 0) { perror("Erreur de fork."); exit(1); }
des1 = open(argv[1], O_RDONLY);
if (des1 == -1) { perror("Fichier non existant."); exit(1); }
if (fstat(des1, &s1) == -1) { perror("Erreur de
fstat
"); exit(1); }des2 = open(argv[2], OWRONLY|OCREAT|OEXCL, s1.stmode);
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="n">des1</span><span class="p">,</span> <span class="n">tampon</span><span class="p">,</span> <span class="mi">255</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> <span class="n">close</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">exit</span><span class="p">(</span><span class="mi">0</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="mi">255</span><span class="p">)))</span> <span class="n">write</span><span class="p">(</span><span class="n">des2</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="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> <span class="n">close</span><span class="p">(</span><span class="n">des1</span><span class="p">);</span> <span class="n">close</span><span class="p">(</span><span class="n">des2</span><span class="p">);</span> <span class="n">wait</span><span class="p">(</span><span class="o">&</span><span class="n">x</span><span class="p">);</span>
} }