标准C语言,修改配置文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标准C语言,修改配置文件相关的知识,希望对你有一定的参考价值。

编写一个修改配置文件的函数,调用此函数后能完成如下操作:
1、修改配置文件字段值。
2、添加新字段。
3、忽略#号注释项。
如配置文件config.ini内容如下:
[ccddt]
ver=1.0.2
#status=1
status=2
[system]
ver=2.7.2
root=/home/linux
调用函数后,将配置文件字段与实参比较。若存在此字段,则将此字段与实参比较。若不同,则修改配置文件中字段值。若相同,则忽略。若不存在此字段,则添加此字段。

我定义的函数原型是 void modify_ini(char * ini_name, char * pre_key, char * key, char * key_value);
其中,ini_name为配置文件的名字,
pre_key为配置文件中[]部分,如以下配置文件中的[CCDDT]和[SYSTEM],
key为[]下边的部分,如以下配置文件中的VER, STATUS, ROOT等,
key_value为key字段的值,如以下配置文件中VER的值1.0.2, STATUS的值2.

现在的问题是
1。现在能实现修改配置文件中已存在的字段值,比如[CCDDT]下的VER值改成1.0.3,但是如果改成1.1,原来的.2覆盖不了。如何能将此行删除,然后写如新数据而不影响其他
带空格的话,以后改此字段 仍然是个问题

在1.1后面带空格
只要该行数据的最大长度确定,在你这行数据确定后,不足部分全部用空格覆盖。
比如ver=1.0.2现在的长度是9个字符,如果我确定这行内容不会超过12个字符,那后面的内容我可以全用空格覆盖,最后只要加个回车即可。

不知道你所谓的以后改不方便指什么
参考技术A 呃。。感觉全部读到内存会方便一些
要修改的话 在内存里改好再全写回来
参考技术B 是否能加些分.估计写好要二.三个小时.
你是想做加load=*.exe 吧.哈哈.
加分找我.

分享一种修改配置文件的方法

大家好,我是杂烩君。

本次分享一种修改配置文件的方法,文章很短,但挺实用~

平时,我们使用的配置文件可以是json、ini等这些标准格式,也可以是一些非标准格式。这些标准格式都有一些对应的库进行解析修改,比较方便。但是,有时候我们需要修改一些非标准格式的一些文件里的一些内容,可能就得自己想办法了。

这里提供一种方法:使用sed工具进行修改。

sed 工具是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。

例如,之前我们分享的文章:远程登陆开发板:RTL8723驱动移植+wpa_supplicant移植+SSH移植中有用到如下用于配置板子所连接WiFi的配置文件wpa_supplicant.conf:

r/run/wpa_supplicant
update_config=1
ap_scan=1

network=
        ssid="test"
        psk="12345678"
        scan_ssid=1
        key_mgmt=WPA-PSK
        priority=1

假如我们想要修改ssid的值为 LinuxZn 及psk的值为 88888888 ,可以怎么修改?

命令行操作:

左右滑动查看全部代码>>>

sed -i 's/ssid="[^"]*"/ssid="LinuxZn"/g' ./wpa_supplicant.conf
sed -i 's/psk="[^"]*"/ssid="88888888"/g' ./wpa_supplicant.conf

也可以在C代码中调用以上命令,如:

代码:

左右滑动查看全部代码>>>

#include <stdio.h>   
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

#define SHELL_CMD_MODIFY_WIFI_SSID        "sed -i \\'s/ssid=\\"[^\\"]*\\"/ssid=\\"%s\\"/g\\' ./wpa_supplicant.conf"
#define SHELL_CMD_MODIFY_WIFI_PSW         "sed -i \\'s/psk=\\"[^\\"]*\\"/psk=\\"%s\\"/g\\' ./wpa_supplicant.conf"
#define SHELL_CMD_RESET_WIFI_CONF_FILE    "cp default_wpa_supplicant.conf wpa_supplicant.conf"


int main(int arc, char *argv[])

    char shell_cmd[256] = 0;

    // 重置WiFi配置文件
    system(SHELL_CMD_RESET_WIFI_CONF_FILE);

    // 修改WiFi名称
    snprintf(shell_cmd, sizeof(shell_cmd), SHELL_CMD_MODIFY_WIFI_SSID, "LinuxZn");
    system(shell_cmd);

    // 清除shell_cmd
    bzero(shell_cmd, sizeof(shell_cmd));

    // 修改WiFi密码
    snprintf(shell_cmd, sizeof(shell_cmd), SHELL_CMD_MODIFY_WIFI_PSW, "88888888");
    system(shell_cmd);

 return 0;

运行结果:

在修改配置文件之前,需要重置一下,保证配置文件的格式正确。

往期推荐:

嵌入式并行多线程处理器,了解一下!

分享几个实用的代码片段(附代码例子)

废旧板子再利用:搭建无线调试环境!

分享嵌入式软件调试方法及几个有用的工具!

手把手教你使用VSCode + gdb + gdbserver调试ARM程序

嵌入式大杂烩周记 | 第 9 期

嵌入式段错误的3种调试方法汇总!

写国际化的嵌入式代码,时间问题如何处理?

在公众号聊天界面回复1024,可获取嵌入式资源;回复 m ,可查看文章汇总。

以上是关于标准C语言,修改配置文件的主要内容,如果未能解决你的问题,请参考以下文章

C语言,程序读取标准输入是啥意思?

在C语言里标准函数存放在啥文件中?

引用c语言标准库函数一般要用啥预处理命令

什么是C语言标准函数库?平常用的哪些函数属于标准函数库?

C语言标准头的使用,C语言入门教程,你我的好帮手!

当前C语言标准为ISO/IEC 9899:1999是吗?