Ver Mensaje Individual
  #3 (permalink)  
Antiguo 15/12/2008, 16:39
aol00002
 
Fecha de Ingreso: diciembre-2008
Mensajes: 4
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: creacion de procesos en linux usando hebras

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


typedef struct datos_hebra{
char* ruta;
}t_datos_hebra;

int num_entradas=0;
struct stat buff;
DIR* direccion;
struct dirent* dir;

void* contar(void* parametro);

int main(int argc, char* argv[]){
int res;

int pid_proc_padre;
int pid_proc_hijo;

t_datos_hebra* parametros;
pthread_t* ahebra;
parametros=(t_datos_hebra*)malloc(1*sizeof(t_datos _hebra));
ahebra=(pthread_t*)malloc(1*sizeof(pthread_t));

parametros[0].ruta=argv[1];

res=fork();

if(res==0){
pthread_create(&ahebra[0],NULL,(void*)contar,(void*)&parametros[0]);
pthread_join(ahebra[0],NULL);
printf("\nEl numero de entradas del directorio es: %d\n",num_entradas);
}

else{
pid_proc_padre=getppid();
pid_proc_hijo=getpid();
printf("\nEl PID del proceso padre es: %d",pid_proc_padre);
printf("\nEl PID del proceso hijo es: %d\n",pid_proc_hijo);
}

free(parametros);
free(ahebra);

return 1;
}

void* contar(void* parametro){
int cte;
int cerrar;

t_datos_hebra* aux;
aux=(t_datos_hebra*)parametro;

cte=lstat(aux->ruta,&buff);

if((buff.st_mode & S_IFMT)==S_IFDIR){
printf("\nEs un DIRECTORIO");
direccion=opendir(aux->ruta);
dir=readdir(direccion);
while(dir!=NULL){
num_entradas++;
dir=readdir(direccion);
}
cerrar=closedir(direccion);
}
}