Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ccsponcer3 en 30 Mayo 2016, 04:37 am



Título: warnings en compilacion
Publicado por: ccsponcer3 en 30 Mayo 2016, 04:37 am
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!


Título: Re: warnings en compilacion
Publicado por: AlbertoBSD en 30 Mayo 2016, 04:55 am
 :silbar: :silbar: Reconozco ese codigo   ;-) ;-)

Sobre el exec necesitas:

Código
  1. #include <unistd.h>

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


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

Citar
ignoring 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:


Citar
gets() 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:

Código
  1. dd = fgets(dd,1000,conf);
  2. if(dd == NULL){
  3.  printf("Error\n");
  4.  exit(0);
  5. }

Eso fue para el fgets y para el fscanf tenemos

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

Citar
These 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:

Código
  1. int err;
  2. err =  fscanf(conf,"NOMBRE_SWAP=%s\n\r",nombre_swap);
  3. if(err == 0){
  4.  printf("Error\n");
  5.  exit(0);
  6. }
  7. //Asi con todos y cada uno de los fscanf
  8.  


Pero repito realemente es omitible el warning

Saludos!


Título: Re: warnings en compilacion
Publicado por: ccsponcer3 en 30 Mayo 2016, 05:57 am
Hola, gracias por la respuesta en cuanto a la libreria unistd.h la misma esta incluida, sera por los parametros de la misma? gracias


Título: Re: warnings en compilacion
Publicado por: HardForo en 5 Junio 2016, 18:03 pm
Prueba de este modo....

Código:
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)