P.S: no veo nada malo con feof, la idea era también quen si hay un error (cosa que un EOF también setea el bit), se interrumpa "el paso" de la salida al fichero ...
El problema es, tal como se utiliza en el programa, el uso de "feof" es un error lógico. Eso porque usualmente se toma a esa función como
¿Hay mas caracteres que leer? cuando debería ser
¿Que paso con la ultima operación de lectura?Dado el bucle:
{
fgets(fileBuffer
, sizeof(fileBuffer
), pipeOutput
); fputs(fileBuffer
, fileOutput
); }
Supongamos que se leen todas las lineas menos la ultima, a partir de ese momento:
1) fgets lee la ultima linea, no hay problema.
2) fputs la imprime, ídem.
3) feof
no retorna verdadero ya que la ultima operación de lectura fue exitosa.
4) lectura extra con fgets falla
5) escritura con fputs (no debería)
6) feof retorna verdadero y se termina el bucle.
Como puedes ver se realiza una iteracion de mas. Para evitarlo se tendría que modificar el bucle a:
fgets(fileBuffer
, sizeof(fileBuffer
), pipeOutput
); {
fputs(fileBuffer
, fileOutput
); fgets(fileBuffer
, sizeof(fileBuffer
), pipeOutput
); }
Desde mi punto de vista es demasiado trabajo (ademas de reducir la claridad del código) cuando, para empezar, basta con simplemente verificar el valor de retorno de "fgets".
Un saludo