Exemple #1
0
Fichier : all.c Projet : Benkho/PT4
void lister(char *file)
{
  long taille_fichier_entier;
  taille_fichier_entier = taille_fichier(file);

  //ouverture du fichier TAR à desarchiver
  FILE *fr = NULL;
  fr = fopen(file, "rb"); // en mode "read binary" 
  if (fr != NULL)
  {
    int end_file; end_file=0;

    while (end_file==0)
    {
      // on récupère le nom du fichier
      char filename[TAILLE_NOM_FICHIER];
      fread (filename, TAILLE_NOM_FICHIER, 1, fr);
      printf("Nom du fichier : %s\n", filename);

      fseek(fr, 24, SEEK_CUR);
      
      char taille_octal_str[TAILLE_TAILLE_FICHIER];
      int taille_dec;
      fread (taille_octal_str, TAILLE_TAILLE_FICHIER, 1, fr);
      taille_dec = ocToDec(atoi(taille_octal_str));
      printf("Taille du fichier : %i\n", taille_dec);

      fseek(fr, (taille_dec+TAILLE_FIN_HEADER), SEEK_CUR);
      
      //------------------------------------------------------------------------------------------------------------------------


      int decalage;
      decalage = decalage_curseur_fichier_suivant(ftell(fr), taille_dec);
      fseek(fr, decalage, SEEK_CUR);  

      long sauv_position_curseur; sauv_position_curseur = ftell(fr);

      char testfinfichier[TAILLE_BLOC];
      fread (testfinfichier, TAILLE_BLOC, 1, fr);

      end_file=1;
      int i; i = 0;
      while (end_file==1 && i<TAILLE_BLOC)
      {
        if (testfinfichier[i] != 0)
        {
          end_file=0;
        }
        i++;
      }

      fseek(fr, sauv_position_curseur, SEEK_SET);
    }
    fseek(fr, 0, SEEK_END);
    fclose(fr);
  }
}
Exemple #2
0
int main(void) {
    char *ptr, req[500], resource[500];
    int fd, langeur;
    langeur = recv_ligne(0, req);
    ptr = strstr(req, " HTTP/");
    if(ptr == NULL) perror("HTTP");
    else {
    *ptr = 0;
    ptr = NULL;
    if(strncmp(req, "GET ", 4) == 0)
    ptr = req+4;
    if(strncmp(req, "HEAD ", 5) == 0)
    ptr = req+5;
    if(ptr == NULL) printf("\trequete inconnue !\n");
    else {
    if (ptr[strlen(ptr) - 1] == '/')
    strcat(ptr, "index.html");
    strcpy(resource, WEBROOT);
    strcat(resource, ptr);
    fd = open(resource, O_RDONLY, 0);
    if(fd == -1) {
    envoyer_chaine(1, "HTTP/1.0 404 NOT FOUND\r\n");
    envoyer_chaine(1, "Server: Zorgos webserver\r\n\r\n");
    envoyer_chaine(1, "<html><head><title>404 Not Found</title></head>");
    envoyer_chaine(1, "<body><h1>URL not found</h1></body></html>\r\n");
    }
    else {
    envoyer_chaine(1, "HTTP/1.0 200 OK\r\n");
    envoyer_chaine(1, "Server: Zorgos webserver\r\n\r\n");
    if(ptr == req + 4) {
    langeur = taille_fichier(fd);
    ptr = (char *) malloc(langeur);
    read(fd, ptr, langeur);
    send(1, ptr, langeur, 0);
    free(ptr);
    }
    close(fd);
    }
    }
    }

    return 0;
}
Exemple #3
0
Fichier : all.c Projet : Benkho/PT4
void extraire(char *filetar, char *sortie)
{
  long taille_fichier_entier;
  taille_fichier_entier = taille_fichier(filetar);

  //creation du dossier de sortie
  char dossier_cmd[100];
  sprintf(dossier_cmd, "mkdir %s%s", sortie, filetar);
  printf("dossier_cmd %s\n", dossier_cmd );
  // system(dossier_cmd);


  //ouverture du fichier TAR à desarchiver
  FILE *fr = NULL;
  fr = fopen(filetar, "rb"); // en mode "read binary" 
  if (fr != NULL)
  {
    int end_file; end_file=0;

    while (end_file==0)
    {
      // on récupère le nom du fichier
      char filename[TAILLE_NOM_FICHIER];
      fread (filename, TAILLE_NOM_FICHIER, 1, fr);

      // on créé le chemin complet du fichier de sortie
      char filepath[100];
      sprintf(filepath, "%s%s", sortie, filename);

      //on créé un nouveau fichier portant ce nom
      FILE *file_n = NULL;
      file_n = fopen(filepath, "w");  // en mode write
      if (file_n != NULL)
      {
        fclose(file_n);
      }

      char permissions[TAILLE_PERMISSIONS];
      fread (permissions, TAILLE_PERMISSIONS, 1, fr);
      int perm_int;
      perm_int = atoi(permissions);
      char perm_cmd[100];
      sprintf(perm_cmd, "chmod %i %s", perm_int, filepath);
      system(perm_cmd);

      char proprio[TAILLE_PROPRIETAIRE];
      fread (proprio, TAILLE_PROPRIETAIRE, 1, fr);
      
      char groupe[TAILLE_GROUPE];
      fread (groupe, TAILLE_GROUPE, 1, fr);
      
      char taille_octal_str[TAILLE_TAILLE_FICHIER];
      int taille_dec;
      fread (taille_octal_str, TAILLE_TAILLE_FICHIER, 1, fr);
      taille_dec = ocToDec(atoi(taille_octal_str));
      
      char last_modif[TAILLE_DERNIERE_MODIF];
      fread (last_modif, TAILLE_DERNIERE_MODIF, 1, fr);
      
      char checksum[TAILLE_CHEKSUM];
      fread (checksum, TAILLE_CHEKSUM, 1, fr);
      
      char type[TAILLE_TYPE];
      fread (type, TAILLE_TYPE, 1, fr);
      
      char linkname[TAILLE_NOM_FICHIER_LIE];
      fread (linkname, TAILLE_NOM_FICHIER_LIE, 1, fr);
      
      char headrest[TAILLE_USTAR_HEADER];
      fread (headrest, TAILLE_USTAR_HEADER, 1, fr);

      char *fileraw;
      fileraw = malloc(taille_dec*sizeof(char));
      // char fileraw[taille_dec];
      fread (fileraw, 1, taille_dec, fr);
      
      //------------------------------------------------------------------------------------------------------------------------

      //ecriture du fichier lui même [ 512 -> ...]
      file_n = fopen(filepath, "ab");  /* add binary */
      if (file_n != NULL)
      {
        fwrite(fileraw, 1, taille_dec, file_n);
        fclose(file_n);
      }

      int decalage;
      decalage = decalage_curseur_fichier_suivant(ftell(fr), taille_dec);
      fseek(fr, decalage, SEEK_CUR);  

      long sauv_position_curseur; sauv_position_curseur = ftell(fr);

      char testfinfichier[TAILLE_BLOC];
      fread (testfinfichier, TAILLE_BLOC, 1, fr);

      end_file=1;
      int i; i = 0;
      while (end_file==1 && i<TAILLE_BLOC)
      {
        if (testfinfichier[i] != 0)
        {
          end_file=0;
        }
        i++;
      }

      fseek(fr, sauv_position_curseur, SEEK_SET);
      free(fileraw);
    }
    fseek(fr, 0, SEEK_END);
    fclose(fr);
  }
}