
15/12/2008, 16:39
|
| | Fecha de Ingreso: diciembre-2008
Mensajes: 4
Antigüedad: 16 años, 3 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*)¶metros[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);
}
} |