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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ordenación de vectores con creación de procesos.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ordenación de vectores con creación de procesos.  (Leído 1,291 veces)
zascarac

Desconectado Desconectado

Mensajes: 1


Ver Perfil
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);
         }
            
            
         
      }
      
   }
}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[?][C]¿Creación de procesos iniciales?
Programación C/C++
Run.EXE 4 2,795 Último mensaje 19 Agosto 2012, 22:29 pm
por Foxy Rider
Creación de un árbol de procesos en linux
GNU/Linux
jeanksky 0 2,547 Último mensaje 8 Abril 2013, 17:41 pm
por jeanksky
Problema Creacion de procesos
Programación C/C++
losbirras 0 1,297 Último mensaje 17 Noviembre 2013, 21:03 pm
por losbirras
Duda ejercicio java Ordenación de Vectores
Java
Thryks 6 3,981 Último mensaje 14 Marzo 2014, 11:51 am
por Thryks
C++ Mas iteradores, con vectores de vectores ¡ juerga !
Programación C/C++
Orubatosu 1 2,370 Último mensaje 4 Diciembre 2014, 17:18 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines