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