Pb code c ls -l

me 06 -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je fais ls -l en C , ça marche mais sa maffiche egalement "." et ".." est ce que qqun sait comment on fait pour les virer?

Merci bcp
A voir également:

7 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Le problème vient de ta fonction stat.
Tu fais stat(".",&taille). Donc le programme appliquera la fonction stat pour le même répertoire "." (répertoire courant).
Pour qu'à chaque itération, t'obtiennes la taille avec la fonction stat, tu dois plutôt faire quelque chose du genre :
struct stat taille;
while ((lecture = readdir(rep)))
{

if(lecture->d_name[0] != '.') {
   stat(lecture->d_name,&taille);
   filesize = taille.st_size;
   printf("%s %d \n",lecture->d_name,filesize);
}

Cdlt,
1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,

Comment ça tu fais "ls -l" en C ? Tu as codé une fonction qui te liste les fichiers d'un répertoire ou tu utilises system("ls -l") ?
Et sur quel OS tu travailles ?

Cdlt,
0
me 06
 
je suis sur linux

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>

int main()
{
// Utilisation de la structure dirent pour recuperer le nom du fichier
//
struct dirent *lecture;
DIR *rep;

// Se positionner dans le repertoire courant
//
rep = opendir(".");

// Tant qu'il y a des fichiers, afficher leur nom
//
while ((lecture = readdir(rep)))
{
printf("%s\n", lecture->d_name);
}

// Fermeture du repertoire
//
closedir(rep);

return 0;
}

voila le code
0
me 06
 
sa c'est juste ls parce que je veux regler un pb a la fois ^^
0
Mitch05 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
C'est bizarre que ta commande "ls -l" t'affiches aussi "." et ".." car sous linux cette commande n'affiche pas les fichers cachés (qui sont tous les fichiers commençant par un ".")

Sous quel OS as-tu testé ton programme ?
Car sous Windows je ne sais pas si cette commande agit autrement ou si windows ne considère pas les "." et ".." comme cachés.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
C'est bizarre que ta commande "ls -l" t'affiches aussi "." et ".." car sous linux cette commande n'affiche pas les fichers cachés (qui sont tous les fichiers commençant par un ".")
Attention à ne pas confondre "." et ".." avec les fichiers cachés. Rien à voir.
0
me 06 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
je compile avec gcc...sa m'affiche bien le resultat attendu mais sa m'affiche le "." et ".." et je veux les enlever parce que apré quand j'essaye de recupere la taille du fichier et de l'afficher sa me met:

. 4096
..4096
etc

en faite la taille est bonne mais elle saffiche pas au bon endroit, c'est pour cela que je souhaiterais que qqun m'aide (si possible) a d'abord virer ces 2 trucs qui m'emerdent un peu!!! aprés pour la taille on verra
0
Mitch05 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   > me 06
 
Utilise les expressions régulières pour enlever les fichiers qui commence par un "."

voici un lien utile pour les regex : https://nicolasj.developpez.com/articles/regex/
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > me 06
 
T'as pas répondu à ma question.
Tu as recodé en C la fonction qui liste un répertoire ? ou tu utilises la fonction system("ls -l") ?
Et sous quel système travailles-tu ?

Cdlt,
0
me 06 > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
jté mi le code .....

et je compile avec putty car je ss sous vista...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mitch05 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Les fichiers "." et ".." sont considérés comme cachés, particulier je suis d'accord, sous linux car si tu fais "ls -l" ils ne sont pas affichés. Par contre si tu fais "ls -al" ils ont affichés.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Les fichiers "." et ".." sont considérés comme cachés
Non et non. "." signifie le dossier courant et ".." le dossier père. Rien à voir avec la notion de cacher.
Et puis la fonction première de "ls -al" n'est pas que d'afficher les fichiers cachés mais d'afficher ceux qui commencent par "." Ce qui revient au même au final. Mais en tout cas "." et ".." n'ont rien à voir avec des fichiers cachés.
0
Mitch05 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Et si tu fais ça ?

if(lecture->d_name[0] != '.')
{
filesize = taille.st_size;
printf("%s %d \n",lecture->d_name,filesize);
}

est-ce que ça marche ?
0
me 06
 
non!! je galere la^^
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Le problème vient de ton stat.
Tu effectues stat(".", &taille).
Normal qu'il te donne la taille du dossier puisque "." désigne le dossier courant. Du coup tu as l'impression que ça marche pour la première itération alors que non.
Il faut que tu mettes le path du fichier en premier argument dans stat (donc à la place du point).
La taille te sera donnée alors dans taille.st_size de type off_t.

Cdlt,
0
me 06
 
ouais mais dans ce cas sa veut dire que si mon fichier source je le met dans un autre endroit il va mdire path incorrect nn?
par exemple la jtravaille ds le repertoire X on va dire donc toi sque tu me dis si g bein compri sa serait de mettre

stat("X",....) en admettant que X se situe a la racine de l'arbo;

mais est ce que si je prend mon fichier .c et que je le met dans un dossier Y il va faloir que je change le path je pense nn?
se que je voudrais c'est que sa soit "generique" en qq sorte enfin si c possible
0