begin process at 2012 05 29 05:51:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Fichier & Disque

 > 

faire un "ls" mais en C


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

faire un "ls" mais en C

mercredi 7 juin 2006 à 11:31:42 | faire un "ls" mais en C

timy94


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

mercredi 7 juin 2006 à 11:45:49 | Re : faire un "ls" mais en C

PoFMaN

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
mercredi 7 juin 2006 à 11:58:18 | Re : faire un "ls" mais en C

fredcl

Réponse acceptée !
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

mercredi 7 juin 2006 à 12:26:37 | Re : faire un "ls" mais en C

DMK04

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+
mercredi 7 juin 2006 à 14:38:56 | Re : faire un "ls" mais en C

timy94


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

mercredi 7 juin 2006 à 14:57:43 | Re : faire un "ls" mais en C

PoFMaN

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
mercredi 7 juin 2006 à 18:11:52 | Re : faire un "ls" mais en C

laurent1024

Membre Club
 Essaye :  while(read(fd,(char *) nom,BUFSIZ)>0)  // (sans le &)
Car char[..] c'est deja un char * .
&nom = char **
++
mercredi 7 juin 2006 à 21:49:37 | Re : faire un "ls" mais en C

Hylvenir

Réponse acceptée !
Salut,

il y a les : opendir, readir, closedir


jeudi 8 juin 2006 à 14:12:51 | Re : faire un "ls" mais en C

timy94

J'ai utilisé dirent.h, opendir readdir closedir et ce marche. Merci beaucoup.

Timy94

jeudi 8 juin 2006 à 14:15:15 | Re : faire un "ls" mais en C

timy94


J'ai utilisé dirent.h, opendir readdir closedir et ce marche. Merci beaucoup.

Timy94



Cette discussion est classée dans : char, ls, fd, bufsiz, renvoi


Répondre à ce message

Sujets en rapport avec ce message

renvoi de type char[] d'une fonction [ par sbouli ] Bonjour,Je suis ULTRA débutant et je cherche à faire une fonction renvoyant du char, voila le principe :char lectureIni (char section[], char clef[], J'y arrive pas et ca m'enerve [ par nach73 ] j'ai un probleme que je dois resoudre pour demain.Je dois remplacer un mots dans un fichierma fonction qui effectue cela se plante royalementRem:la fo OpenGL [ par bouba ] Bonjour, je souhaite dessiner avec OpenGL et afficher le résultat dans une image mais je ne veux pas du tout l'afficher dans une fenêtre, j'ai donc cr int en char ou string [ par gremlins7 ] Bonjour à tous,J'effectue une liaison série avec l'objet serialport de visual c++ 2008 qui me renvoi des bytes (fonction readbytes). Je cherche à effe erreur sur les tubes [ par andoid ] Bonjour à tous: J'essais d'exuter une commande passé ligne de commande avec un pipe: là je suis en mode test: je veux juste exécuter ls -l |grep tu ca plante et sa m'enerve [ par nach73 ] Bonjour je suis debutant j'essaie de copier un fichier source dans un fichier destinataire par des fonctions ci dessous.Mais seulement il me creer bie probleme de fichier [ par nach73 ] bonjour de je suis debutant en c.Je suis occupe a ecrit un prog qui cherche un mot saise a la console.J'ai un probleme quand je recherche la position Problème de lecture fichier [ par nach73 ] J'ai un enorme probleme je n'arrive pas a lire dans mon fichierVoila la partie de mon programme.Si quelqu'un peux m'aide.Merci.//ouverture du fichier Probleme avec realloc() ... [ par Tidam ] Voili voilou, j'ai une erreur de compilation avec ce petit bout de code : void addop(char opnick[50]) {     nboper++;     oper = realloc(oper, nboper Afficher une infobulles ? [ par mayti ] Salut. je voudrais savoir comment afficher une infobulle après avoir réduit la fenêtre dans le systray ? Et pouvoir creér une fonction du genre Affich


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales