Linux - AYUDA sobre busqueda de ficheros

 
Vista:

AYUDA sobre busqueda de ficheros

Publicado por jess (4 intervenciones) el 24/01/2007 00:03:03
hola, tengo que hacer una aplicacion que realice una busqueda de un fichero dentro de un arbol de directorios....(en C)

para hacer esto tengo que empezar por:
lanzar un proceso por cada directorio que explore, y si dentro de un directorio explorado existen otros directorios, se creara otro proceso para explorar esos directorios.

¿me podriais ayudar en este primer paso por favor?
no en lo de lanzar un proceso, en eso no ai problema, si no en lo de los directorios y eso.

no se si me explico, lo que quiero es algo concreto.
tengo que lanzar procesos (eso no hay problema) el problema es como lanzo estos procesos explorando directorios.

solo necesito alguna ayuda para poder intentar hacer el ejercicio.

Muchas gracias de antemano. uns aludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:AYUDA sobre busqueda de ficheros

Publicado por Tom (35 intervenciones) el 24/01/2007 12:01:01
Pero ¿sabes como explorar los directorios? o ¿qué es lo que preguntas? Un proceso se lanza igual si estás explorando directorios que si estás haciendo calceta :D

Mira las funciones opendir() readdir() scandir() stat() fstat() ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA sobre busqueda de ficheros

Publicado por Tom (482 intervenciones) el 25/01/2007 09:59:19
Bueno, me ha parecido divertido ya que yo nunca lo habría enfocado con subprocesos, pero bueno, lo hice para probar y aquí tienes lo más importante del código:

/* */
void process(char *dName) {
DIR *dire;

if(!(dire = opendir(dName))) {
perror(dName);
} else {
struct dirent *de;
while((de = readdir(dire))) {
printf("%s\n", de->d_name);
if((de->d_type == DT_DIR) && strcmp(de->d_name, ".") && strcmp(de->d_name, "..")) {
int pid = fork();
if(!pid) {
if(fchdir(dirfd(dire))) {
perror(dName);
} else {
process(de->d_name);
return;
}
}
}
}
if(errno)
perror(dName);
closedir(dire);
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA sobre busqueda de ficheros

Publicado por jess (4 intervenciones) el 25/01/2007 11:38:24
mucha gracias Tom, aunque me da algun fallo con la funcion process y con el ultimo if (errno)
pero me a servido de mucho gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA sobre busqueda de ficheros

Publicado por Tom (482 intervenciones) el 25/01/2007 12:04:27
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA sobre busqueda de ficheros

Publicado por jess (4 intervenciones) el 25/01/2007 13:10:56
Oye Tom disculpa por las molestias, si ya me puedes resolver este error...que me sale....
Muchas cracias:

/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../lib/crt1.o: En funciñon `_start':../sysdeps/i386/elf/start.S:115: referencia a `main' sin definir
collect2: ld devolvió el estado de salida 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA sobre busqueda de ficheros

Publicado por Tom (482 intervenciones) el 25/01/2007 14:17:17
¿ Tu programa tiene la función main() ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA sobre busqueda de ficheros

Publicado por jess (4 intervenciones) el 25/01/2007 20:02:50
Buenas Tom, mira te enseño lo que tengo yo escrito :

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include <dirent.h>

void process(char *dName);

int main
{
void process(char *dName)
{
DIR *dire;
int pid;

if(!(dire = opendir(dName)))
{
perror(dName);
}

else
{
struct dirent *de;
while((de = readdir(dire)))
{
printf("%s\n", de->d_name);
if((de->d_type == DT_DIR) && strcmp(de->d_name, ".") && strcmp(de->d_name, ".."))
{
int pid = fork();
if(!pid)
{
if(fchdir(dirfd(dire)))
{
perror(dName);
}
else
{
process(de->d_name);
return;
}
}
}
}
if(errno)
perror(dName);
closedir(dire);
}
}

}


y esto es lo que me dice al compilarlo:

direct.c:13: error: syntax error before ‘{’ token
direct.c:20: error: syntax error before ‘if’
direct.c:50: aviso: nombres de parámetros (sin tipos) en la declaración de la función
direct.c:50: aviso: la definición de datos no tiene tipo o clase de almacenamiento
direct.c:51: error: syntax error before ‘}’ token
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA sobre busqueda de ficheros

Publicado por Tom (482 intervenciones) el 26/01/2007 13:39:22
O sea, que no tienes ni idea de C.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>

/* */
int main(int argc, char** argv) {
/*void process_r(char*, DIR *); */
void process(char *);
char *dName = argv[1];

if(!dName)
dName=".";
/* setpgid(pid = getpid(), 0); */
process(dName);
/*process_r(dName, opendir(dName)); */
return(0);
}

/* */
void process(char *dName) {
...
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar