El lenguaje C lee y escribe archivos de configuración definiendo la estructura UCI

** El lenguaje C lee y escribe archivos de configuración definiendo la estructura UCI

1 、 配置 文件 名称: roaming
#define UCI_ROAM_FILE "/ etc / config / roaming" // 配置 文件
config wlan "wlan0"
opción basicnetwork_name 'siot'
option basicstate 'enable'
option securitysuite 'wpa2'
option securitywpaxauthentication 'psk'
option securitywpaxieee_80211 desactivado '
opción securitywpaxpassphrase' 12345678 '

2. Necesidad de definir una matriz de estructura

KEY Roaming_Conf_Value [6] = {{"basicnetwork_name", 0,0}, \
{"basicstate", 1,0}, \
{"securitysuite", 2,0}, \
{"securitywpaxauthentication", 3,0}, \
{"securitywpaxieee_80211r", 4,0}, \
{"securitywpaxpassphrase", 5,0}};

3. Luego, debe definir la
estructura estática del objeto UCI uci_context ctx = NULL;
4. Luego, escriba una única función de archivo de configuración de escritura;
void write_roam_config (char
package_char, char section_char, char roam_conf_name, char roam_conf_value)
{// escribe el archivo de configuración de roaming
int i = 0;
printf ("write_roam_config ....... inicio ..... \ n");
struct uci_package
pkg = NULL;
ctx = uci_alloc_context ();

if (UCI_OK != uci_load(ctx, UCI_ROAM_FILE, &pkg))
    goto cleanup; //if open false then goto cleanup:
char p[100];
char s[100];
char o[100];
char c[100];

    sprintf(p,"%s",package_char);   //配置文件名
    sprintf(s,"%s",section_char);   //wlan0 
    sprintf(o,"%s",roam_conf_name); //option 对应的名称如:basicnetwork_name 
    sprintf(c,"%s",roam_conf_value);//value值: siot

    struct uci_ptr ptr ={
       .package= p,
       .section= s,
       .option = o,
       .value = c,
    };

    uci_set(ctx, &ptr); //write config
    uci_commit(ctx, &ptr.p, false); //save
    uci_unload(ctx, ptr.p); //unload

limpieza:
uci_free_context (ctx);
ctx = NULL;

}
5. Lea el archivo de configuración y asigne una función a la matriz de estructura;
void read_config_init ()
{
printf ("read_config_init () está comenzando \ n");
struct uci_package pkg = NULL;
struct uci_element
e;

const char *value; 
ctx = uci_alloc_context(); //  
if (UCI_OK != uci_load(ctx, UCI_ROAM_FILE, &pkg)) 
    goto cleanup;  
//foreach "power" element
uci_foreach_element(&pkg->sections, e) 
{
    struct uci_section *s = uci_to_section(e); 
    //print section type
    //printf("section s's type is %s.\n",s->type);
    //if(!strcmp) if(!strcmp("power",s->type));

         for(int i=0;i<=5;i++){
             if (NULL != (value = uci_lookup_option_string(ctx,\
                    s, Roaming_Conf_Value[i].name))) {
             strcpy(Roaming_Conf_Value[i].value,strdup(value));
             //printf("%s's %s is %s.\n",s->e.name,Roaming_Conf_Value[i].name,value);
            }
        }
} 
uci_unload(ctx, pkg);  

limpieza:
uci_free_context (ctx);
ctx = NULL;
printf ("read_config_init () es end \ n");
} **

Supongo que te gusta

Origin blog.51cto.com/13300270/2655135
Recomendado
Clasificación