Programmer la commande ls -l en C

Bonjour,
Dans le cadre d'un projet, je voudrais afficher les différents type de fichier dans un répertoire (executable, text, etc...).
J'arrive a afficher les fichiers avec "opendir" mais j’arrête pas de chercher et je trouve rien pour comment afficher le types des fichiers... Si quelqu'un a une idée a proposer, merci d'avance.

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Un fichier régulier est bien différent d'un lien symbolique , d'un tube nommé ou d'une entrée de périphérique (caractère, bloc).

    <ital>struct dirent {
    ino_t d_ino; /* inode number */
    off_t d_off; /* not an offset; see NOTES */
    unsigned short d_reclen; /* length of this record */
    unsigned char d_type; /* type of file; not supported
    by all filesystem types */
    char d_name[256]; /* filename */
    }</itall>

    L'entrée d_type contient le type d'entrée.

    Voir
    man 3 readdir


    Pour déterminer les types de fichiers, regarde du côté de libmagic
    1. Un grand MERCI, ça m'aide réellement, je sens que je suis pas loin du but souhaiter !
  2. Modérateur
    Bonjour,

    Le "type d'un fichier" ça n'existe pas. Tous les fichiers sont une série d'octets, il n'y a pas de différence.

    Selon le système d'exploitation tu peux avoir des notions d'extensions ou de droits d'exécutions qui te permettent de rajouter des informations supplémentaires. Mais rien de généralisable.
    1. Dans se cas, comment faire pour afficher les extensions ?
      1. Modérateur
        L'extension du fichier est dans son nom.

        En soit un fichier n'a pas d'extension, c'est juste la fin de son nom qui introduit cette notion mais ce n'est qu'une indication, ça n'a aucune valeur, on peut renommer un fichier image en .exe ça ne fait pas de lui un fichier exécutable.
    2. Contributeur
      Les extensions n'ont de sens que sur Windows.
      Si tu parles de "ls -l", tu es probablement sur GNU/Linux. Oublie donc cette histoire d'extension.

      ls -l ne donne pas le type de fichier. Il affichera juste s'il s'agit d'un répertoire ou pas... En revanche, il affichera aussi les droits du fichier (lecture, écriture, etc.).

      Est-ce bien ls -l que tu souhaites reproduire ?
      1. Je dois faire les deux enfaite, savoir si les fichiers présent dans un répertoire est un exécutable, un ficher texte ou un répertoire puis également connaitre les droits du fichier.