Faire un ls en C
Résolu
Jayjaynam
Messages postés
2
Statut
Membre
-
Jayjaynam Messages postés 2 Statut Membre -
Jayjaynam Messages postés 2 Statut Membre -
Bonjour, j'essaye de reproduire le fonctionnement de ls en C mais je rencontre un problème. Voici mon code :
Le problème est à la ligne où je compare des chaines. La 3ème comparaison est fausse et je le sais mais en fait, j'aimerais juste comparer ma chaine de caractère à .* pour enlever tous les fichiers cachés de la liste que va m'afficher le ls. C'est sur ce point que j'aimerais que vous m'aidiez parce que je ne sais absolument pas comment je vais pouvoir faire ça.
Merci d'avance pour vos réponses.
Jayjaynam
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char **argv){
DIR* rep = NULL;
struct dirent* fichierLu = NULL;
if((rep = opendir("/home/jayjay/projetres")) == NULL){
perror("Le fichier n'a pas pu être ouvert");
exit(1);
}
while((fichierLu = readdir(rep)) != NULL){
if(strcmp(fichierLu->d_name, ".") != 0 && strcmp(fichierLu->d_name, "..") != 0 && strcmp(fichierLu->d_name, ".*") != 0){
printf("%s\n", fichierLu->d_name);
}
}
}
Le problème est à la ligne où je compare des chaines. La 3ème comparaison est fausse et je le sais mais en fait, j'aimerais juste comparer ma chaine de caractère à .* pour enlever tous les fichiers cachés de la liste que va m'afficher le ls. C'est sur ce point que j'aimerais que vous m'aidiez parce que je ne sais absolument pas comment je vais pouvoir faire ça.
Merci d'avance pour vos réponses.
Jayjaynam
2 réponses
-
Salut Jayjaynam,
https://man7.org/linux/man-pages/man3/readdir.3.html
Comme la structuredirent
contientd_name[256]
, qui est une chaîne C, il suffit que tu vérifies que le premier caractère du tableau d_name n'est pas un point.
Tu fais cela simplement comme ceci :
if ( (strcmp(fichierLu->d_name, "..") != 0) && (fichierLu->d_name[0] != '.') ) {
Cela permet aussi de retirer le test(strcmp(fichierLu->d_name, ".") != 0)
car ce cas est de toutes façons couvert par le test d'inégalité du premier caractère avec le point.
Dal -
Ah oui effectivement, j'avais complètement oublié la base de la base ... Grâce à toi, ça marche bien et je vais donc pouvoir continuer à m'entrainer.
Le sujet peut donc être clôt.
Merci beaucoup et bonne journée.
Jayjaynam.