Faire un "ls" mais en C [Résolu]

timy94
Messages postés
50
Date d'inscription
jeudi 17 novembre 2005
Dernière intervention
7 janvier 2009
- 7 juin 2006 à 11:31 - Dernière réponse : timy94
Messages postés
50
Date d'inscription
jeudi 17 novembre 2005
Dernière intervention
7 janvier 2009
- 8 juin 2006 à 14:15
bonjour,

Je voudrais ecrire quelques lignes de codes pour remplacer la commande ls sous linux, pour me passer de la commande
system("ls"); qui ne renvoi que 0 ou 1. Je pourrai ecrire system("ls > titi); et lire le résultat dans titi. Mais mon intention est d'utiliser >>>>

int fd;
char chemin [BUFSIZ] = "/usr/local/qui/va/bien";
char nom     [BUFSIZ] = "";
if ((fd=open(chemin,O_RDONLY,0)==-1{
   printf("erreur");
} else {
   while(read(fd,(char *) &nom,BUFSIZ)>0) {
      printf("%s",nom);
    }
}

En fait read(fd,(char *) &nom,BUFSIZ) me renvoi toujours -1 et je ne fais jamais printf. L'ouverture avec open est bonne puisque le descripteur me renoi dans mon cas 8 et pas -1.

J'ai même utiliser la structure >>>>
 strcut direct [ino_t d_ino, char d_name[BUZSIZ]};
struct direct tamp_rep;
et la lecture read(fd,(char *) & tamp_rep,BUFSIZ) me renvoi encore -1.
 
J'ai essayer pas mal d'autre chause sur le mode d'écritue avec ou sans (char *) avec ou sans & rien y fait.

Merci d'avance!!

Timy94</gras>
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
fredcl
Messages postés
547
Date d'inscription
mercredi 8 janvier 2003
Dernière intervention
7 octobre 2007
- 7 juin 2006 à 11:58
3
Merci
Bonjour,


En gros si j'ai bien compris tu voudrais parcourir l'arborescence d'un
répertoire et afficher des informations sur les fichiers ou répertoires
parcourrus.

Si c'est bien cela va voir le post que j'ai écrit ici
(http://www.siteduzero.com/forum-83-47155-373643.html#r373643), il
devrais répondre à une partie de ton problème.

Cordialement

Fred Cailleau-Lepetit
Soft In The Box
Forum wxWidgets en français

Merci fredcl 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de fredcl
Meilleure réponse
Hylvenir
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Dernière intervention
5 octobre 2006
- 7 juin 2006 à 21:49
3
Merci
Salut,

il y a les : opendir, readir, closedir

Merci Hylvenir 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de Hylvenir
cs_PoFMaN
Messages postés
58
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
21 juin 2006
- 7 juin 2006 à 11:45
0
Merci
Salut,

Si j'ai bien compris tu ton "/usr/local/qui/va/bien" est un répertoire et donc tu peut pas te servir de la fonction read, regarde la valeur de errno je parie qu'elle est égale à EISDIR.

Si j'ai mal compris faudrai que tu donne la valeur de errno ca peut aider
Commenter la réponse de cs_PoFMaN
dmk04
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Dernière intervention
7 mars 2012
- 7 juin 2006 à 12:26
0
Merci
Salut,

je ne suis pas sûr d'avoir compris ce que tu veux.
ce que j'ai compris : tu veux récupérer le résultat de "ls" pour pouvoir l'exploiter dans un programme.
Si c'est ça : essaye d'utiliser "execl" (regarde "exec" dans le manuel de linux), mais il faudra que tu fasse un "fork" et une redirection de la sortie standard ("dup"), je ne me rappel plus si on peut rediriger la sortie standard sur un char**, mais sur un fichier oui :)

A+
Commenter la réponse de dmk04
timy94
Messages postés
50
Date d'inscription
jeudi 17 novembre 2005
Dernière intervention
7 janvier 2009
- 7 juin 2006 à 14:38
0
Merci
Bonjour,
En fait tu as raison l'erreur est l'erreur 21 "C'est un repertore".
Mais j'utilise ma bible >>>Le langage C nirme ANSI de Kernighan et Ritchie. Et au paragraphe 8.6 Le listage des fichiers d'un répertoire y est décrit la fonction lire_repertoire(...) { }, et il utlise le read comme ceci.
while (read (pr->fd, (char*), &tamp_rep, sizeof(tamp_rep)) etc..... On voit que le read est utilisé pour la lecture du réptoire.

En UNIX un répertoire est un simple fichier
Timy94</gras>
Commenter la réponse de timy94
cs_PoFMaN
Messages postés
58
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
21 juin 2006
- 7 juin 2006 à 14:57
0
Merci
Salut,
je sais qu'un répertoire est un fichier mais il est souvent interprété de manière différente par pas mal d'outils.

Le langage C nirme ANSI>> j'ai jamais lu. T'as essayé de recopier leur source et de l'essayer? t'as peut être loupé une étape parce que s'il est prévue que read renvoie ce type d'erreur c'est qu'il doit y avoir une méthode particulière pour traiter un répertoire. Je sais pas de quand date ton bouquin mais ils utilisent peut-être pas la même version de read que toi
Commenter la réponse de cs_PoFMaN
cs_laurent1024
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
- 7 juin 2006 à 18:11
0
Merci
 Essaye :  while(read(fd,(char *) nom,BUFSIZ)>0)  // (sans le &)
Car char[..] c'est deja un char * .
&nom = char **
++
Commenter la réponse de cs_laurent1024
timy94
Messages postés
50
Date d'inscription
jeudi 17 novembre 2005
Dernière intervention
7 janvier 2009
- 8 juin 2006 à 14:12
0
Merci
J'ai utilisé dirent.h, opendir readdir closedir et ce marche. Merci beaucoup.

Timy94</gras>
Commenter la réponse de timy94
timy94
Messages postés
50
Date d'inscription
jeudi 17 novembre 2005
Dernière intervention
7 janvier 2009
- 8 juin 2006 à 14:15
0
Merci
J'ai utilisé dirent.h, opendir readdir closedir et ce marche. Merci beaucoup.
Timy94</gras>
Commenter la réponse de timy94

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.