Sujet
Écrire un programme en C qui prend en paramètre deux fichiers et copie le contenu du premier vers le deuxième avec les mêmes droits d'accès.
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>#define MAX 1024
int main(int argc, char **argv) { int des1, des2, n; char tampon[MAX]; struct stat s1;
if (argc == 3) { des1 = open(argv[1], O_RDONLY);
<span class="k">if</span> <span class="p">(</span><span class="n">des1</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="n">perror</span><span class="p">(</span><span class="s">"Fichier inexistant"</span><span class="p">);</span> <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> <span class="p">}</span> <span class="n">fstat</span><span class="p">(</span><span class="n">des1</span><span class="p">,</span> <span class="o">&</span><span class="n">s1</span><span class="p">);</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">S_ISREG</span><span class="p">(</span><span class="n">s1</span><span class="p">.</span><span class="n">st_mode</span><span class="p">))</span> <span class="p">{</span> <span class="n">perror</span><span class="p">(</span><span class="s">"Fichier non regulier"</span><span class="p">);</span> <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> <span class="p">}</span> <span class="n">des2</span> <span class="o">=</span> <span class="n">open</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">O_WRONLY</span><span class="o">|</span><span class="n">O_CREAT</span><span class="o">|</span><span class="n">O_EXCL</span><span class="p">,</span> <span class="n">s1</span><span class="p">.</span><span class="n">st_mode</span><span class="p">);</span> <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="n">MAX</span><span class="p">)))</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="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>
} else { perror("Nombre d'arguments incorrect"); exit(1); } }