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!
: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!
Hola, gracias por la respuesta en cuanto a la libreria unistd.h la misma esta incluida, sera por los parametros de la misma? gracias
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)