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

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

//Estructura para la hebra.
typedef struct datos_hebra{
char* ruta;
}t_datos_hebra;

void* mostrarDatos(void* parametros);

void* mostrarDatos(void* parametros){
int cte;
//Definimos un puntero a la estructura que vamos a utilizar.
t_datos_hebra* aux;
aux=(t_datos_hebra*) parametros;
//Estructura donde se va a guardar toda la informacion del archivo o directorio.
struct stat buff;

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

if((buff.st_mode & S_IFMT)==S_IFDIR){
printf("\nLa entrada es un directorio.\n.");
}
//Ahora si no es un directorio vemos si es un dispositivo de e/s por bloques.
else if((buff.st_mode & S_IFMT)==S_IFBLK)
{
printf("\nEl archivo es de tipo desconocido.\n");
}
//¿Es un dispositivo de e/s por caracteres?.
else if((buff.st_mode & S_IFMT)==S_IFCHR)
{
printf("\nEl archivo es de tipo desconocido.\n");
}
//¿Es un enlace simbólico?.
else if((buff.st_mode & S_IFMT)==S_IFLNK)
{
printf("\nEl archivo es de tipo desconocido.\n");
}
//¿Es una tuberia?.
else if((buff.st_mode & S_IFMT)==S_IFIFO)
{
printf("\nEl archivo es de tipo desconocido.\n");
}
//Si no es nada de lo anterior,entonces será un archivo regular.
else{
printf("\nEl archivo es regular.\n");
}
}

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

int result;
int pid_proc_padre;
int pid_proc_hijo;
//Creamos los parámetros para la hebra.
t_datos_hebra *parametros;
//Creamos una hebra
pthread_t *ahebra;
//Reservo memoria para la hebra y para sus parámetros.
ahebra=(pthread_t*)malloc(1*sizeof(pthread_t));
parametros=(t_datos_hebra*)malloc(1*sizeof(t_datos _hebra));
//Metemos la ruta en los parametros de la hebra, para utilizarla en mostrarDatos.
parametros[0].ruta=argv[1];
//Ahora creamos el proceso.
result=fork();
if(result==0){
//Ahora mostramos el pid del padre y del hijo.
pid_proc_padre=getppid();
pid_proc_hijo=getpid();
printf("Pid del proceso padre:%d\n",pid_proc_padre);
printf("Pid del proceso hijo:%d\n",pid_proc_hijo);
//Ahora ejecutamos el comando ls.
execlp("ls","",NULL);
}
//Lanzamos la hebra.
pthread_create(&ahebra[0],NULL,(void*)mostrarDatos,(void*)&(parametros[0]));
//Esperamos a que termine la hebra.
pthread_join(ahebra[0],NULL);
//Liberamos recursos.
free(parametros);
free(ahebra);

return 0;
}