elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Ordenación de vectores con creación de procesos. en: 15 Abril 2015, 22:52 pm
Hola, el caso es que tengo un problemilla con un programa que debe hacer lo siguiente:
Tenemos que diseñar un programa de ordenación de vectores de gran tamaño.
El programa tendrá como argumentos el nombre del fichero que contiene el vector,
el tamaño del vector y el nº de procesos en el que se quiere dividir el cálculo. Por
simplicidad, el tamaño del vector debe ser múltiplo del nº de procesos.

El proceso padre crea los procesos hijos y les indica la parte del fichero que deben
tratar. También les indica el nombre del fichero en el que deben almacenar el
resultado de la ordenación.
Por ejemplo, si tenemos un fichero con un vector de 100 elementos, y queremos
dividir el cálculo en 10 procesos, el proceso número 1 tendrá que tratar los
elementos del 1 al 10, el proceso 2 los elementos del 11 al 20, y así
sucesivamente. Finalmente, el programa principal deberá hacer la ordenación final leyendo los ficheros parcialmente ordenados por los procesos.

Mi idea es guardar los números en un array. A los procesos les paso la cantidad de números que deben ordenar y el puntero al primer número del array a partir del cual deben ordenar. El problema es que no me deja pasar punteros a los procesos y no sé como pasarle el array al proceso hijo.
Este es el código que tengo, que es un poco ***** seca XD.



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

int main(int argc,char *argv[]){
   int tam=atoi(argv[2]),status;//tam es el tamano del vector a ordenar
   int proc=atoi(argv[3]);//proc es el numero de procesos a lanzar
   //COmprobacioones previas de argumentos correctos.
   if(argc!=4){
      printf("Error. Numero de parametros de entrada incorrecto");
      exit(-1);
   }
   
   else if(tam<=0 || proc<=0){
      printf("el numero de procesos o el tamano del vector es incoherente %i %i",tam,proc);
      
      exit(-1);
   }
   else if(tam<proc){
      printf("No puede haber mas procesos que longitud tiene el vector");
   
      
      exit(-1);
   }
   
   else{
      FILE *fich;
      fich=fopen(argv[1],"r");
      
      int vector[tam],i=0,procvec,num;
      int *puntero[proc];//array de punteros
      procvec=tam/proc;//Esta variable establece cuantos numeros debe  manejar cada proceso
      int k=1;
      while (fscanf(fich,"%i",&num)==1){
         vector=num;
         
         if(i==(procvec)){
            puntero[k]=&vector;//Al proceso se le enviara la direccion del primer numero a partir del cual //debe ordenar. Ademas de la cantidad de numeros a ordenar(procvec).
            procvec=procvec*2;
         }
         i++;
         
      }
      
      puntero[0]=&vector[0];
      int j=0;
      for(i=0;i<proc;i++){
         pid_t creado;
         creado=fork();
         
         if (creado==-1) break;
         
         else if(creado==0){
            char texto1[1000000],texto2[1000000],texto3[100000];
            
            sprintf(texto1,"%i",procvec);
            sprintf(texto2,"%p",puntero);//Esta ***** es la que falla.Buscar otra forma.
            
            execl("/home/alumno/filckl/practica2/herramienta","herramienta",texto1,texto2,NULL);
              
         //herramienta es el programa con el que se muta el proceso hijo y que //ordena un vector. Este funciona bien, no hay problema.
   
            
            
                  }
         else{
            printf("Soy el padre");
            wait(&status);
         }
            
            
         
      }
      
   }
}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines