#include // Archivos Necesarios con funciones y comandos para IPC #include // #include #include #include #include #include #include #include #include #include #include "semaph.h" #define SHMKEY ((key_t) 9876) #define SEMKEY1 ((key_t) 7984) #define SEMKEY2 ((key_t) 7988) //Definición de ciertas constantes #define PERMS 0666 //Permisos para escritura y lectura #define BSIZE 256 #define FIFOTX "betofifo" int i, filed; char datos[BSIZE]; struct timeval tini; //Variable tiempo de inicio de transmisiones struct timeval tfin; //Variable tiempo final de transmisiones struct timezone tz; //Variable obsoleta pero necesaria para gettimeofday long tabla[4][4000]; //tabla para guardar datos de índice y tiempo de transmisiones typedef struct _buffer { char data[BSIZE]; int size; } BUFFER; BUFFER *buf; int shmid; //identificador de Memoria int emptybuf_sem, fullbuf_sem; //Semáforos datawr() { for (i=0;i<256;i++) //Estafunción escribe un paquete de 256 bytes de caracteres datos[i]=(char)(i); } llenarcolumna(){ //Esta función llena la primera columna de la tabla con for(i=0;i<4000;i++) //múltiplos de 256 bytes para indicar eje X tabla[0][i]=(1+i)*256; } writermem() { sem_wait(fullbuf_sem); //Función de lectura de memoria write((int)buf,datos,sizeof(datos)); //una vez que se encuentre llena sem_signal(emptybuf_sem); } readermem() { sem_wait(emptybuf_sem); //Función de escritura de memoria read((int)buf,datos,sizeof(datos)); //una vez que esté vacía sem_signal(fullbuf_sem); } wrpipe(int pip) { write(pip,datos,sizeof(datos)); //Escritor de la pipa } rdpipe(int pip) { read (pip,datos,sizeof(datos)); //lector de la pipa } main(int argc, char *argv[]) /*Programa principal*/ { FILE *fd; //Descriptor para archivo int rango; //Rango ingresado en KB int cant; //Cantidad de paquetes int pipa[2]; pid_t pid; int i; if (argc<2) {printf("\nUsar:edipc \n"); //Se especifica uso de edipc exit(0);} if (argc>2) {printf("\nDemasidados Argumentos\nUsar:edipc \n"); //Se especifica uso de edipc exit(0);} rango=atoi(*++argv); if (rango>1000){ printf("Usar rango <=1000 KB\n"); //Se especifica uso de edipc exit(0); } datawr(); //Se crea los paquetes llenarcolumna(); //Se llena la tabla cant=rango*4; //Se determina cantidad de paquetes (4*cantidad de KBytes fd=fopen("tabla.txt","w"); //Se crea archivo tabla.txt para escritura pipe(pipa); // Transmisión de datos por pipa if((pid=fork())<0){ // printf("Fallo de Fork\n"); // exit(0);} // // Se inicia el contador de tiempo gettimeofday(&tini,&tz); // if (pid==0) {close(pipa[1]); // for (i=0;i