warnings en compilacion

Iniciado por ccsponcer3, 30 Mayo 2016, 04:37 AM

0 Miembros y 1 Visitante están viendo este tema.

ccsponcer3

Hola gente, tengo lo siguiente, esto lo que hace es basicamente crear un archivo "vacio" en base a un archivo de configuracion del cual obtiene la data respectiva. La cuestion es que me tira unos warnings en la funcion fgets y en las funciones fscanf que dicen lo siguiente:

ignoring return value of 'fgets', declared with attribute warn_unused_result [-Wunused-result]

ignoring return value of 'fscanf', declared with attribute warn_unused_result [-Wunused-result]

y esto para la funcion exec, que directamente no la reconoce:
implicit declaration of function 'exec' [-Wimplicit-function-declaration]




FILE *conf = NULL;
      char *config_file = "swap.cfg";
      char *nombre_swap = calloc(50,1);
      char *dd = calloc(1000,1);
      int count_page = 0;
      int size_page = 0;
      conf = fopen(config_file,"r");
      if(conf){
         fgets(dd,1000,conf); //Saltamos la primer linea
         fscanf(conf,"NOMBRE_SWAP=%s\n\r",nombre_swap);
         fscanf(conf,"CANTIDAD_PAGINAS=%d\n\r",&count_page);
         fscanf(conf,"TAMANIO_PAGINA=%d\n\r",&size_page);
         memset(dd,0,1000);
         snprintf(dd,1000,"dd if=/dev/zero of=%s bs=%i count=%i",nombre_swap,count_page,size_page);
         printf("dd command: %s\n",dd);
         exec(dd); //ejecutar linea de comando
      }
      else   {
         printf("no se puede abrir el archivo de configuracion\n");
      }


Lo que no tengo idea mucho es como proceder y especificamente que me esta diciendo. Gracias!

AlbertoBSD

#1
 :silbar: :silbar: Reconozco ese codigo   ;-) ;-)

Sobre el exec necesitas:

#include <unistd.h>

Y mas info al respecto de esas funciones en: http://linux.die.net/man/3/exec


Cita de: ccsponcer3 en 30 Mayo 2016, 04:37 AM
Lo que no tengo idea mucho es como proceder y especificamente que me esta diciendo. Gracias!

Citarignoring return value of 'fgets', declared with attribute warn_unused_result [-Wunused-result]

Te esta diciendo que se esta ignorando el resultado que devuelven esas funciones cada una devuelve algun valor con el cual puedes validar que la funciones tuvo exito o no..

Sobre el warning de fscanf  y fgets son omitibles solo si realmente quieres validar si hay o no error por ejemplo fgets devuelve:


Citargets() and fgets() return s on success, and NULL on error or when end of file occurs while no characters have been read.

Mas info en http://linux.die.net/man/3/fgets

Lo que quiere decir es que realmente tendrias que agregar esto:

dd = fgets(dd,1000,conf);
if(dd == NULL){
 printf("Error\n");
 exit(0);
}


Eso fue para el fgets y para el fscanf tenemos

http://linux.die.net/man/3/fscanf

CitarThese functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure.

Dice que tienes que tener:

int err;
err =  fscanf(conf,"NOMBRE_SWAP=%s\n\r",nombre_swap);
if(err == 0){
 printf("Error\n");
 exit(0);
}
//Asi con todos y cada uno de los fscanf



Pero repito realemente es omitible el warning

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

ccsponcer3

Hola, gracias por la respuesta en cuanto a la libreria unistd.h la misma esta incluida, sera por los parametros de la misma? gracias

HardForo

#3
Prueba de este modo....

if( fgets (dd,1000,conf)!=NULL ){
    // ..
}


etc

El compilador te esta diciendo que debes chequear lo que devuelve fgets() aunque claro que podriasa usar la opcion que te da: -Wunused-result (con eso suprimes el error)

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *