fonction de recherche de fichier en C [LINUX]

fonction de recherche de fichier en C [LINUX] - C - Programmation

Marsh Posté le 15-04-2004 à 19:14:09    

Salut,
j'arrive pas a trouver une fonction equivalente au FIND qui recherche un fichier donné en parametre (ainsi que le rep de depart)
 
voila ce que g fait: (stat marche pas non plus)  
 
HELP !! :pt1cable:
 
PS: je sais que la fonction devrait etre recursive par la suite mais la je vois pas... :'(
 

Code :
  1. struct dirent *lecture;
  2.     struct stat *buf;
  3.     DIR *rep;
  4.     int i,j;
  5.     rep = opendir(repDepart);
  6.     while ((lecture = readdir(rep))) {
  7.           if((i=(strcmp(lecture->d_name,".\0" )))!=0 && (j=(strcmp(lecture->d_name,"..\0" )))!=0 ){
  8.           printf("FICHIER: %s\n", lecture->d_name);
  9.           printf("INODE: %d\n", lecture->d_ino);
  10.           printf("STAT: %d\n",stat(lecture->d_name,buf));
  11.           printf("STMODE: %d\n",buf->st_mode);
  12.           }
  13.     }
  14.     closedir(rep);
  15.     return NULL;


Message édité par bbugnon le 15-04-2004 à 19:18:00
Reply

Marsh Posté le 15-04-2004 à 19:14:09   

Reply

Marsh Posté le 15-04-2004 à 22:38:57    

Déja, tu vires les \0 de tes chaines.
Quand tu ecris ".."le compilo créera une chaine de 3 caracteres, le 3e etant 0.
DE plus ton test est incomprehensible tel qu'ecrit:
if((i=(strcmp(lecture->d_name,".\0" )))!=0 && (j=(strcmp(lecture->d_name,"..\0" )))!=0 )
Primo, les !=0 sont inutiles, et secondo, tu n'utilises pas i et j plus loin, alors les affectations sont inutiles.
 
En simplifiant ton test, on obtient:
if (strcmp(lecture->d_name,"." ) && strcmp(lecture->d_name,".." ) )
test qui echoue si lecture->d_name est "."ou ".."
 
A+,


Message édité par gilou le 15-04-2004 à 22:39:47
Reply

Marsh Posté le 15-04-2004 à 22:40:08    

f((i=(strcmp(lecture->d_name,".\0" )))!=0
 
ptdr [:rofl]

Reply

Marsh Posté le 16-04-2004 à 00:57:24    

Boh tu sais Taz, tout le monde a le droit de debuter la prog.
A+,

Reply

Marsh Posté le 16-04-2004 à 11:55:07    

Taz a écrit :

f((i=(strcmp(lecture->d_name,".\0" )))!=0
 
ptdr [:rofl]


 
 
c surtout pour debugger...  :pfff:

Reply

Marsh Posté le 16-04-2004 à 12:06:01    

Si tu debugges, tu fais un appel a strcmp(lecture->d_name,"." ); avant ta ligne, tu met un breakpoint et basta.
Ca evitera d'avoir des lignes illisibles avec des trucs a enlever hors de la phase de debug, activite fortement plantogene. Ton truc pour debugger risque en fait de rajouter des bugs quand tu va passer de la phase "code avec trucs dedans pour le debug" a la phase "code sans trucs dedans pour le debug"
A+,

Reply

Marsh Posté le 16-04-2004 à 13:02:17    

je sais bien... le hic c que je suis pas encore famillier avec les debuggers linux.. c tout..
Sinon ça va je gere mes printfs sauvages ;)
 
@+

Reply

Marsh Posté le 16-04-2004 à 13:30:18    

bbugnon a écrit :


 
 
c surtout pour debugger...  :pfff:  

attend qu'on soit clair
 
 
"taz" <=> {'t', 'a', 'z', '\0'}

Reply

Marsh Posté le 16-04-2004 à 13:52:35    

bbugnon a écrit :

je sais bien... le hic c que je suis pas encore famillier avec les debuggers linux.. c tout..
Sinon ça va je gere mes printfs sauvages ;)
 
@+


Ben donc c'est la premiere chose qu'il te faut potasser, car quand tu maitrisera un minimum, tu rattraperas tout le temps perdu a apprendre comment utiliser le debugger, vis a vis du temps mis a ecrire puis effacer des printf dans le source.
A+,

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed