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 structure
Tu fais cela simplement comme ceci :
Cela permet aussi de retirer le test
Dal
https://man7.org/linux/man-pages/man3/readdir.3.html
Comme la structure
direntcontient
d_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