#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
// définition de la granularité des lectures/écritures
#define SIZE 10000
int main(int argc,char *argv[]) {
int r;
int w;
char t[SIZE];
ssize_t lus;
r = open("a.data",O_RDONLY); // appel système pour ouvrir un fichier : -1 si échec
if (r==-1) {
perror("a.data");
exit(1);
}
// ouverture en écriture et troncature, création si nécessaire, donc spéficification des droits
// d'accès qui seront associés au fichier nouvellement créé, ici on demande rw-r--r--
w = open("b.data",O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
if (w==-1) {
close(r);
perror("b.data");
exit(1);
}
while ((lus=read(r,t,SIZE*sizeof(char)))>0) { // lecture de SIZE octets
write(w,t,lus); // écriture du nombre d'octets effectivement lus
}
close(w); // relâchement des ressources
close(r);
exit(0); // sortie en mode succès!
}