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

timy94 50 Messages postés jeudi 17 novembre 2005Date d'inscription 7 janvier 2009 Dernière intervention - 7 juin 2006 à 11:31 - Dernière réponse : timy94 50 Messages postés jeudi 17 novembre 2005Date d'inscription 7 janvier 2009 Dernière intervention
- 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 

9 réponses

Répondre au sujet
fredcl 547 Messages postés mercredi 8 janvier 2003Date d'inscription 7 octobre 2007 Dernière intervention - 7 juin 2006 à 11:58
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de fredcl
Hylvenir 364 Messages postés mercredi 11 février 2004Date d'inscription 5 octobre 2006 Dernière intervention - 7 juin 2006 à 21:49
+3
Utile
Salut,

il y a les : opendir, readir, closedir
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Hylvenir
cs_PoFMaN 58 Messages postés dimanche 12 décembre 2004Date d'inscription 21 juin 2006 Dernière intervention - 7 juin 2006 à 11:45
0
Utile
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 206 Messages postés samedi 29 octobre 2005Date d'inscription 7 mars 2012 Dernière intervention - 7 juin 2006 à 12:26
0
Utile
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 50 Messages postés jeudi 17 novembre 2005Date d'inscription 7 janvier 2009 Dernière intervention - 7 juin 2006 à 14:38
0
Utile
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 58 Messages postés dimanche 12 décembre 2004Date d'inscription 21 juin 2006 Dernière intervention - 7 juin 2006 à 14:57
0
Utile
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 987 Messages postés mardi 31 mai 2005Date d'inscription 30 août 2012 Dernière intervention - 7 juin 2006 à 18:11
0
Utile
 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 50 Messages postés jeudi 17 novembre 2005Date d'inscription 7 janvier 2009 Dernière intervention - 8 juin 2006 à 14:12
0
Utile
J'ai utilisé dirent.h, opendir readdir closedir et ce marche. Merci beaucoup.

Timy94</gras>
Commenter la réponse de timy94
timy94 50 Messages postés jeudi 17 novembre 2005Date d'inscription 7 janvier 2009 Dernière intervention - 8 juin 2006 à 14:15
0
Utile
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.