Entrées/sorties haut niveau

Copie de fichiers

Écrire une fonction :

int copie(FILE *entree, FILE *sortie)

qui copie le contenu du fichier de descripteur entree dans le fichier de descripteur sortie. La fonction doit retourner le nombre d'octets copiés, ou -1 en cas d'erreur. La copie peut se faire par caractère avec getc() / putc() ou bien par bloc avec fread() / fwrite().

Tester cette fonction en écrivant un programme principal l'utilisant avec la copie de deux fichiers : un fichier texte (par exemple le code source du programme), et un fichier binaire (par exemple un fichier exécutable). Vous pourrez utiliser la commande cmp(1) pour vérifier que la copie est conforme à l'original.

Format texte et format binaire

Écrire un programme binhexasc.c qui :

  1. crée un tableau de 60 entiers tel que l'élément i du tableau contienne la valeur i + 1, le tableau contiendra donc les nombres de 1 à 60 ;
  2. écrit ces nombres sur la sortie standard sur deux chiffres, à l'aide de printf() ;
  3. écrit le contenu du tableau dans trois fichiers :
    • sans conversion de format, c'est-à-dire en binaire, dans un fichier appelé res.bin ;
    • en texte au format décimal, chaque nombre étant écrit sur 3 caractères, dans un fichier appelé res.ascii ;
    • en texte au format hexadécimal, chaque nombre étant écrit sur 8 chiffres, dans un fichier appelé res.hex.

Les trois fichiers devront être créés lors de l'écriture avec les droits r--- --- ---. Vous pourrez utiliser les commandes od(1) ou hd(1) pour vérifier le contenu du fichier res.bin.

Concaténation

Écrire un programme :

copie [src1 src2 src3 ...] dest

qui copie les fichiers src1, src2, src3, ... dans le fichier dest. Si le nombre de paramètres est égal à 1, le programme devra copier le contenu de son entrée standard. De même, si un fichiers source est "-", c'est l'entrée standard qui est utilisée comme source.

Le fichier destination doit être créé avec les droits rw- --- --- et ne doit pas exister. Le programme doit afficher un message d'erreur si ce n'est pas le cas.