Hacer un ls en C

Resuelto
Jayjaynam Mensajes publicados 2 Estado Miembro -  
Jayjaynam Mensajes publicados 2 Estado Miembro -
Hola, estoy intentando reproducir el funcionamiento de ls en C, pero tengo un problema. Aquí está mi código:


#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("El archivo no se pudo abrir");
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);
}
}
}

El problema está en la línea donde comparo cadenas. La tercera comparación es incorrecta y lo sé, pero en realidad, solo quiero comparar mi cadena de caracteres con .* para eliminar todos los archivos ocultos de la lista que se mostrará como en ls. En este punto, me gustaría que me ayudaran porque no tengo ni idea de cómo hacerlo.

Gracias de antemano por sus respuestas.
Jayjaynam

2 respuestas

  1. [Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   1 108
     
    Hola Jayjaynam,

    https://man7.org/linux/man-pages/man3/readdir.3.html

    Como la estructura
    dirent
    contiene
    d_name[256]
    , que es una cadena C, solo necesitas verificar que el primer carácter del arreglo d_name no sea un punto.

    Haces esto de forma sencilla así:

    if ( (strcmp(fichierLu->d_name, "..") != 0) && (fichierLu->d_name[0] != '.') ) {


    Esto también permite eliminar la prueba
    (strcmp(fichierLu->d_name, ".") != 0)
    ya que este caso está de todas formas cubierto por la prueba de desigualdad del primer carácter con el punto.

    Dal
    2
  2. Jayjaynam Mensajes publicados 2 Estado Miembro 1
     
    Ah sí, efectivamente, había olvidado completamente lo básico... Gracias a ti, funciona bien y por lo tanto podré seguir entrenando.
    El tema se puede cerrar.

    Muchas gracias y que tengas un buen día.
    Jayjaynam.
    1