Título: multiplicar matrices con pipes Publicado por: SO en 10 Octubre 2010, 07:18 am Hola!! Necesito ayuda, mi programa debe multiplicar dos matrices utilizando pipes pero la verdad no tengo idea de como hacerlo , he avanzado un poco pero aun falta mucho por hacer... Espero me puedan ayudar a completar mi codigo...
#include <stdlib.h> #include <stdio.h> #include <unistd.h> int m,n,p; /*Variables que contendran las dimensiones de las matrice*/ int **matdfA,**matdfB; int **matA,**matB,*matresultado; /*-----------------------Funciones----------------------*/ /*La funcion cerrarpipe permitira como bien dice su nombre cerrar las entradas no utilizadas*/ void cerrarpipe(int a){ /*el parametro i es la pipe utilizada*/ int j; for(j=0;j<m;j++){ if(j!=a){ close(matdfA[j][0]); /*cerramos tanto la parte de lectura como de escritura de las pipes no utilizadas*/ close(matdfA[j][1]); //close(matdfA[j]); close(matdfB[j][0]); close(matdfB[j][1]); //close(matdfB[j]); } } } void padre_parte_envia_matriz(){ /* Creacion del buffer*/ int j,k, *bufr; for(j=0;j>m;j++){ for(k=0;k<n;k++){ //bufr[k]=matA[j][k]; bufr[k]=matA[j][k]; } write(matdfA[j][1],bufr,sizeof(bufr)); } } /*Leeremos los datos y asignaremos estos al buffer*/ void hijo_recibe(int i){ int *bufr,*resultado; read(matdfA
write(matdfB[1],resultado,sizeof(resultado)); } /*Creacion de las matrices iniciales aleatoriamente e impresion*/ void crear_matrices(int m, int n, int p){ int i,j; //matA=(int *)malloc(sizeof(int*)*m); //for(i=0;i<m;i++){ // matA=(int *)malloc(sizeof(int*)*n); //} for(i=0;i<m;i++){ for(j=0;j<n;j++){ matA[j]=rand()%9; } } for(i=0;i<n;i++){ for(j=0;j<p;j++){ matB[j]=rand()%9; } } printf("********Matriz A********"); for(i=0;i<m;i++){ for(j=0;j<n;j++){ printf("%d",matA[j]); } printf("\n"); } printf("********Matriz B********"); for(i=0;i<n;i++){ for(j=0;j<p;j++){ printf("%d",matB[j]); } printf("\n"); } } void padre_obtiene_datos(){ fd_set fd; int mayor; int cont,j,i; mayor=matdfB[0][0]; for(i=1;i<m;i++){ if(mayor<matdfB
} do{ FD_ZERO(&fd); for(j=0;j<m;j++){ FD_SET(matdfB[j][0],&fd); } if(select(mayor+1,&fd,NULL,NULL,NULL)){ perror("Select"); } else{ for(j=0;j<m;j++){ if(FD_ISSET(matdfB[j][0],&fd)){ /* ..........*/ } else{ read(matdfB[j][0],matresultado,sizeof(matresultado)); cont++; } } } }while(cont<m); } int main(){ int i; int j; /*Peticion de las dimensiones para la creacion de matrices */ printf("De el numero de columnas en de la Matriz A: "); scanf("%d",&n); printf("\n De el numero de filas en de la Matriz A: "); scanf("%d",&m); printf("\n De el numero de filas en de la Matriz B: "); scanf("%d",&p); matdfA=(int **)malloc(sizeof(int *)*m); for(i=0;i<m;i++){ matdfA=(int *)malloc(sizeof(int)*2); matdfB=(int *)malloc(sizeof(int)*2); for(j=0;j<m;j++){ if(pipe(matdfA[j]<0) || pipe(matdfB[j]<0)){ perror("Error creando pipes"); exit(0); } } } /* Creacion de los hijos con las caracteriasticas necesarias*/ for(i=0;i<m;i++){ if(fork()==0){ cerrarpipe(i); hijo_recibe(i); exit(0); } } crear_matrices(m,n,p); padre_parte_envia_matriz(); padre_obtiene_datos(); } Título: Re: multiplicar matrices con pipes Publicado por: Oblivi0n en 10 Octubre 2010, 16:04 pm Seria bueno que metieses el codigo en las etiquetas correspondientes...
Código
|