L3

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">&amp;</span><span class="n">x</span><span class="p">);</span>

} }