timy94
Messages postés50Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention 7 janvier 2009
-
7 juin 2006 à 11:31
timy94
Messages postés50Date d'inscriptionjeudi 17 novembre 2005StatutMembreDerniè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.
fredcl
Messages postés547Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention 7 octobre 20071 7 juin 2006 à 11:58
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.
cs_PoFMaN
Messages postés58Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention21 juin 2006 7 juin 2006 à 11:45
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
dmk04
Messages postés206Date d'inscriptionsamedi 29 octobre 2005StatutMembreDernière intervention 7 mars 2012 7 juin 2006 à 12:26
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+
Vous n’avez pas trouvé la réponse que vous recherchez ?
timy94
Messages postés50Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention 7 janvier 2009 7 juin 2006 à 14:38
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>
cs_PoFMaN
Messages postés58Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention21 juin 2006 7 juin 2006 à 14:57
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