CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Aide programme en C

-Niveale-
-Niveale-
Niveau 6
02 mars 2017 à 22:42:14

Bonjour,

Je dois faire un programme en C, le but est d'utiliser les primitives systèmes pour rechercher une chaîne dans chaque fichier en utilisant une lecture efficace (pas une lecture octet par octet). Il faut afficher le nom de chaque fichier trouvé.

Pour le moment j'ai réalisé ces deux fonctions mais j'ai vraiment l'impression que ma méthode n'est pas assez efficace et trop basique :

#define BUFFER 128

typedef struct FICHIER {
    unsigned char buff[BUFFER_SIZE]; // buffer
    unsigned char* posBuffer; // position dans le buffer
    unsigned char * endBuffer; // pointeur sur la fin du buffer
    int fd; // descripteur de fichier
} FICHIER;


int my_getc(FICHIER *file) {
    int c;

    if (file == NULL) return EOF;
    if (file->mode != 'r') return EOF;

    if (file->posBuffer == file->endBuffer) {
        file->posBuffer = file->b;
        c = read(file->fileDescriptor, file->b, BUFFER);
        file->endBuffer = file->b + c;
        if (c == -1 || c == 0) return EOF;
    }

    return *file->posBuffer++;
}

void parcoursRepertoire(char* chemin, char* recherche) {
    struct dirent *d;
    FICHIER *file;
    char r;
    unsigned int nb;
    unsigned int rechercheLongueur = strlen(recherche);

    DIR *dp = opendir(chemin);
    if (dp == NULL) {
        return EXIT_FAILURE;
    }

    while ((d = readdir(dp)) != NULL) {
        if (d->d_name[0] != '.') {
            if (d->d_type == DT_DIR) {
              parcoursRepertoire(strcat(d->d_name, "/"), recherche);
            }
            else if(d->d_type == DT_REG){
              nb = 0;
              file = fopen(strcat(d->d_name, "/"), "r");
              while ((r = my_getc(file)) != EOF) {
                  if (r == recherche[nb]) {
                      nb++;
                      if (nb == rechercheLongueur) {
                          printf("%s\n", d->d_name);
                      }
                  }
                  else {
                    nb = 0;
                  }
              }
              fclose(file);
            }
        }
        closedir(dp);
    }
}
godrik
godrik
Niveau 30
02 mars 2017 à 23:11:16

commentaire en passant;

Fais attention a ce qu'il se passe quand la chaine est trouvee. J'ai l'impression que tu peux ecrire le nom du fichier plusieurs fois si il y a plusieurs match

Fais attention au pattern recurrent. Si tu cherche "ababfoo" et que le fichier est "abababfoo" alors je pense que ton code ne va pas le trouver.

C'est quoi la definition de FICHIER?

-Niveale-
-Niveale-
Niveau 6
02 mars 2017 à 23:51:20

Le 02 mars 2017 à 23:11:16 Godrik a écrit :
commentaire en passant;

Fais attention a ce qu'il se passe quand la chaine est trouvee. J'ai l'impression que tu peux ecrire le nom du fichier plusieurs fois si il y a plusieurs match

Fais attention au pattern recurrent. Si tu cherche "ababfoo" et que le fichier est "abababfoo" alors je pense que ton code ne va pas le trouver.

C'est quoi la definition de FICHIER?

D'accord merci.
J'ai définis une structure FICHIER pour mon getc, comme ça je peux régler la taille du buffer

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment