exercice 1#

definition de write#

la fonction permets de lire count octets a partir de filedescriptor fd et les en memoire dans buf

fd ca represente la maniere dont on peut interagir avec le fichier en general on mets la valeur de retour de open on lappelle le file descriptor

buf cest ladresse de lendroit ou on a stocke les donnes a ecrire

ssize_t c le nombre doctets quon mets dans le fichier size_t jsp pk mais c un sous type des unsigned int

definition de read#

la fonction permets de lire count octets a partir de filedescriptor fd et les en memoire dans buf

fd ca represente la maniere dont on peut interagir avec le fichier en general on mets la valeur de retour de open on lappelle le file descriptor

buf cest ladresse de lendroit ou on a stocke les donnes a ecrire

count c le nombre doctets que le systeme va compter avant de sarreter decrire/lire le fichier

tout ces appels permettent de la lecture/ecriture en binaire

a contrario, les bibliotheques fstream font differemment

reecriture avec dautre buffers#

char tab[64];
write(fd, tab, 64) //ou write(fd, &tab[0],64*sizeof(char)), mais c mieux dutiliser sizeof (sur char ou sur long dcp) pour etre sur

exercice 2#

int main(void) {
  int ret, n, fd = open("test.dat", O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR);
  if(fd == 1) return 1;

  char msg[] = "value"; 
  n = (strlen(msg) + 1)  sizeof(char);
  ret = write(fd, msg, n); // pour savoir si le write c bien passe
  if(ret != n) return 1;

  unsigned int x = 42; // askip c une blague
  n = sizeof(unsigned int); //pour correctement le stocker
  ret = write(fd, &x, n); 

  if(ret != n) return 1;
  unsigned int tab[3] = {1, 2, 0x12345678};
  n = 3  sizeof(unsigned int); // on sassure du nombre doctets..
  ret = write(fd, tab, n); // pour correctement les stocker
  if(ret != n) return 1;// on verifie

  ret = close(fd); // on le ferme..
  if(ret == 1) return 1; // en verifiant une derniere fois...

  return 0;
}

connaitre la valeur de retour#

on utilise la var denvironnement $?

nombre doctets ecrit lligne 7#

on ecrit 6 caracteres de 1 octets un octet (5 lettres et un char de fin de chaine)

nombre doctets que prends un hexa#

un hexa c 4 bit donc un octet c 2 nombre hexadecimale

bah dcp on utilise la fonction hex() en python

la boucle de la ligne 5 a 9#

int main(void) {
  int ret, fd = open("test.dat", O_RDONLY);// on ouvre un fichier en lecture seule
  if(fd == 1) return 1;

  do {
    char c;
    ret = read(fd, &c, 1);//je lis un octet du fichier en mettant le contenu a ladresse de c
    if(ret == 1) printf("%02x ", c); // affiche ce quon lit si on a bien reussi a le lire
    //printf() <-afficher en c
    // % precise le format dans lequel on ecrit
    // %c ecrit en ascii
    // %02x ecrit en hex
  } while(ret == 1);

  printf("\n"); // affiche un retour à la ligne
  if(ret == 1) return 1;

  ret= close(fd);
  if(ret == 1) return 1;
}

donc on lit le fichier tant quil y a des trucs a lire, et on ressort le tout en hexadecimal, sur la sortie standard

la mysterieuse chaine en hexadecimal (c le contenu de test.dat)#

bon en gros cette chaine doctets en hex c les chars qui formet “value” donc e c le dernier avant loctet 00 (qui signifie fin de chaine de charactere) => 65

donc 4 octets pour un entier non signe

exercice 3#

on a un tres grand tableau de charactere pour lecrire dans un fichier on va ecrire par bloc de caractere dun coup

int writech(int fd, const char* v, int n){ // const permets de bloquer les modifications de ladresse v
  const int tailleb= 64; //taille des blocs ecrits
  int nbwr, rem = n;//nbwr nombre ecrit et rem = restant memoire
  const char * p = v;// donc les deux pointeurs pointent au MEME endroit
  while (rem >= tailleb){
    nbwr = write(fd,p,tailleb)
    rem -= nbwr; //rem, restant en memoire, combien il reste en memoire
    p += nbwr;
    while (rem > 0){
      nbwr = write(fd,p,rem);
      rem -= nmwr;
      p+=nbwr;
    }
    return 0;
  } // a la fin de la boucle il nous restera soit -64, soit 0

exercice 4#

/
├── bin
│   └── visionneurPDF
└── home
    └── fontaine
        ├── prive
        │   └── correction.pdf
        └── sujet.pdf

cp /home/fontaine/prive/correction.pdf ~

- --- --- ---

1er tiret c le type du fichier 2eme groupe de tiret c les droits du proprietaires 2eme groupe de tiret c les droits du groupe 3eme groupe de tiret c les droits du autres

les tirets peuvent etre remplaces par r = lecture w = ecriture x = s = nexiste que dans la colonne du proprietaire (set uid bit) => donc ca montre le fait que ladministrateur a permis lexecution de cet executable comme etant le proprietaire donc elise pour regarder ses scans de onepiece avec ce visionneur pdf desole davoir pose cette question la team