Uso Optimo de fifo's
Publicado por Hector (3 intervenciones) el 02/07/2001 05:51:44
Hola , voy a tratar de ser lo mas explicativo posible , el objetivo que tengo es el
siguiente :
abro un fifo previamente creado con mkfifo y lo leo constantemente para reproducir
los datos que le van lleganda a travez del arvhivo a pantalla , el proglema es que una
vez que recive el primer caracter cada vuelta que pega recive un -1 desde el file
o desde el fgetc mejor dicho , con lo que el uso de la CPU se va para el 90 % , sin
embargo el programa funciona correctamente reproduciendo por pantalla lo que recive
del fifo , pero el rendimiento es inaceptable , me preguntaba si hay alguna forma
de que una vez que recive los primeros datos no se quede constantemente leyendo el -1
que le entra del fifo o de la fucion fgetc mas especificamente lo que me hace que cada
vuelta pege una lectura llevandome al rendimiendo pa el carajo.
Pasteo el pedazo que codigo que maneja esto a ver si se les ocurre alguna idea
( tenia pensado hacerlo con SELECT como con sockets pero no se si eso sirve para archivos
ni tampoco la manera de implementarlo en este caso ya que las pruebas que hize no
andubieron)
Codigo :
(archivo inin previamente creado con mkfifo inin)
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
FILE *fd;
char entrada;
fd=fopen("inin","r");
while(1) {
entrada=fgetc(fd);
if(entrada!=-1){printf("%c",entrada);}
}
return 0;
}
cuendo esta corriendo por primera vez no consume recursos, pero luego del
primer echo "hola" > inin , muestra en pantalla el hola y el cpu se va al 90 %
dado que luego el fgetc siempre toma un valor (-1).
Espero que alguien haya pasado ya por esto y me pueda dar una mano.
Saludos y Gracias por adelantado !
Hector.
siguiente :
abro un fifo previamente creado con mkfifo y lo leo constantemente para reproducir
los datos que le van lleganda a travez del arvhivo a pantalla , el proglema es que una
vez que recive el primer caracter cada vuelta que pega recive un -1 desde el file
o desde el fgetc mejor dicho , con lo que el uso de la CPU se va para el 90 % , sin
embargo el programa funciona correctamente reproduciendo por pantalla lo que recive
del fifo , pero el rendimiento es inaceptable , me preguntaba si hay alguna forma
de que una vez que recive los primeros datos no se quede constantemente leyendo el -1
que le entra del fifo o de la fucion fgetc mas especificamente lo que me hace que cada
vuelta pege una lectura llevandome al rendimiendo pa el carajo.
Pasteo el pedazo que codigo que maneja esto a ver si se les ocurre alguna idea
( tenia pensado hacerlo con SELECT como con sockets pero no se si eso sirve para archivos
ni tampoco la manera de implementarlo en este caso ya que las pruebas que hize no
andubieron)
Codigo :
(archivo inin previamente creado con mkfifo inin)
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
FILE *fd;
char entrada;
fd=fopen("inin","r");
while(1) {
entrada=fgetc(fd);
if(entrada!=-1){printf("%c",entrada);}
}
return 0;
}
cuendo esta corriendo por primera vez no consume recursos, pero luego del
primer echo "hola" > inin , muestra en pantalla el hola y el cpu se va al 90 %
dado que luego el fgetc siempre toma un valor (-1).
Espero que alguien haya pasado ya por esto y me pueda dar una mano.
Saludos y Gracias por adelantado !
Hector.
Valora esta pregunta


0