touchLa commande shell 
touch permet de créer un fichier
vide. Ecrire un programme prenant le nom d’un fichier en ligne de 
commande et le créant.
moreLa commande shell 
more permet d’afficher le contenu d’un
fichier. Ecrire un programme prenant le nom d’un fichier en ligne de
commande et affichant son contenu.
Ecrire un programme C 
alphabet permettant de créer un
fichier. Le nom du fichier crée sera passé en ligne de commande et le
fichier contiendra l’alphabet.
Ecrire un programme C 
createFile permettant de créer un
fichier. Le nom du fichier crée sera le premier des arguments, tous
les arguments suivants seront écrits dans le fichier. Par exemple, la
commande
./createFile toto.txt ceci est le contenu de mon fichier
doit créer un fichier appelé 
toto.txt et contenant
le texte
ceci est le contenu de mon fichier
cpLa commande shell 
cp permet d’afficher le contenu d’un
fichier. Ecrire un programme prenant en ligne de commande le nom d’un
fichier source et celui d’un fichier de destination, et recopiant le
contenu du fichier source dans celui de destination.
Ecrire deux programmes 
storeNames
et 
getNames. 
storeNames demande à l’utilisateur de
saisir une liste de noms et les enregistre au fur et à mesure qu’ils
sont saisis dans un fichier dont le nom a été passé en ligne de
commande au lancement du programme. On arrête le programme en
saisissant −1. 
getNames affiche la liste des noms stockée
dans le fichier dont le nom est passé en ligne de commande. 
Compléter le fichier source suivant :
#include<stdio.h>
#include<stdlib.h>
#define NB_ROTORS 5
#define NB_LETTERS 26
#define FORWARD 1
#define BACKWARD 2
/***********************************************/
typedef struct rotor
{
  char permutation[NB_LETTERS];
  char permutationInverse[NB_LETTERS];
  char position;
}rotor;
/***********************************************/
typedef struct enigma
{
  rotor rotors[NB_ROTORS];
  char mirror[NB_LETTERS];
}enigma;
/***********************************************/
/*
  Dispose tous les rotors dans leur position de depart.
*/
void initialiseRotors(enigma* e)
{
}
/***********************************************/
/*
  Libere la memoire occupee par e.
*/
void enigmaDestroy(enigma* e)
{
}
/***********************************************/
/*
  Alloue la memoire et initialise les champs.
*/
enigma* enigmaCreate()
{
  return NULL;
}
/***********************************************/
/*
  Retourne le rang de letter dans l'alphabet, en indicant 
  a partir de 0.
*/
char indexOfLetter(char letter)
{
  return 0;
}
/***********************************************/
/*
  Retourne la lettre d'indice index dans l'alphabet, 
  'a' est d'indice 0.
 */
char letterOfIndex(char index)
{
  return 0;
}
/***********************************************/
/*
  Fait de la lettre cipherLetter l'image de la lettre 
  d'indice clearIndex par un passage dans le rotor d'indice rotorIndex
  de e.
*/
void setImage(enigma* e, int rotorIndex, int clearIndex, char cipherLetter)
{
}
/***********************************************/
/*
  Fait de firstLetter le reflet de secondLetter.
 */
void setMirror(enigma* e, char firstLetter, char secondLetter)
{
}
/***********************************************/
/*
  Retourne vrai si et seulement si letter est une minuscule
  de l'alphabet.
 */
int isEncryptable(char letter)
{
  return 0;
}
/***********************************************/
/*
  Affiche les rotors et le miroir de e.
*/
void enigmaPrint(enigma* e)
{
}
/***********************************************/
/*
  Fait pivoter le rotor d'indice indexOfRotor de e
  en modifiant sa position de depart. Retourne 
  vrai ssi le rotor est revenu dans sa position 
  initiale.
*/
int rotateRotor(enigma* e, int indexOfRotor)
{
  return 0;
}
/***********************************************/
/*
  Fait pivoter le jeu de rotors de e d'une position.
*/
void rotateRotors(enigma* e)
{
}
/***********************************************/
/*
  Indice d'entree de la lettre d'indice indexOfLetter 
  dans le rotor r, en tenant compte de la position de 
  ce rotor.
*/
int inputIndex(rotor* r, int indexOfLetter)
{
  return 0;
}
/***********************************************/
/*
  Indice de la lettre sortie a l'indice indexOfLetter 
  du rotor r, en tenant compte de la position de 
  ce rotor.
*/
int outputIndex(rotor* r, int indexOfLetter)
{
  return 0;
}
/***********************************************/
/*
  Fait passer la lettre d'indice indexOfLetter dans r
  dans la direction direction (FORWARD ou BACKWARD).
 */
int rotorEncrypt(rotor* r, int indexOfLetter, char direction)
{
  return 0;
}
/***********************************************/
/*
  Fait passer la lettre d'indice indexOfLetter dans 
  le miroir de e.
*/
int mirrorEncrypt(enigma* e, int indexOfLetter)
{
  return 0;
}
/***********************************************/
/*
  Chiffre letter avec e, fait ensuite pivoter les rotors
  de e..
*/
char enigmaEncrypt(enigma* e, char letter)
{
  return 0;
}
/***********************************************/
/*
  Chiffre le fichier clearFName avec e, ecrit le resultat 
  dans cipherFName.
*/
void encryptFile(enigma* e, char* clearFName, char* cipherFName)
{
}
/***********************************************/
/*
  Initilialise les NB_ROTORS rotors de e avec deux 
  ecrits dans le fichier rotors.
 */
void loadRotors(enigma* e, FILE* rotors)
{
}
/***********************************************/
/*
  Initilialise le miroir de e avec une ligne du fichier rotors.
 */
void loadMirror(enigma* e, FILE* rotors)
{
}
/***********************************************/
/*
  Cree une machine enigma initialisee avec le contenu du fichier 
  rotorFileName.
*/
enigma* loadFile(char* rotorFileName)
{
  return NULL;
}
/***********************************************/
/*
  Chiffre le fichier clear avec la machine enigma 
  decrite dans rotors, ecrit le resultat dans cipher.
*/
void enigmaRun(char* clear, char* cipher, char* rotors)
{
  enigma* e = loadFile(rotors);
  encryptFile(e, clear, cipher);  
  enigmaDestroy(e);
}
/***********************************************/
int main(int argc, char* argv[])
{
  if (argc == 4)
    enigmaRun(argv[1], argv[2], argv[3]);
  else
    printf("usage : ./enigma source cipher rotorfile\n ");
  return 0;
}
klmnopqvwxyzgabcdefhijrstu uvwxystzabcdejklmnopqrfghi klmnopqabcdvwxyzgstuefhijr zgabcdefklmnopqvhijrstuwxy tuklmnopqvwxyzgabcdefhijrs wzgabchijrmdefynopqvstuklx
Que contient le message suivant ? (attention, les accents s’affichent mal...)
Bobuq, uynl myck ipyvp zémjbé lr lpkn zvw eywbovtssi !