Linux C代码实现读取配置文件示例
来源:互联网 发布:linux连接工具 ssh 编辑:程序博客网 时间:2024/05/18 03:27
最近在看hostapd,该程序使用了conf配置文件,本文参考hostapd代码抽取出读取配置文件的示例,由于配置选项和业务密切相关,实际使用中仍需要做修改。
下面是代码示例:
/**读配置文件示例注:配置文件必须为unix格式,即\n结尾*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <stdint.h>// 结构体struct hostapd_config{ char iface[16]; uint16_t beacon_int; uint8_t channel; char country[3]; /* first two octets: country code as described in * ISO/IEC 3166-1. Third octet: * ' ' (ascii 32): all environments * 'O': Outdoor environemnt only * 'I': Indoor environment only */};// 默认值struct hostapd_config * config_defaults(void){ struct hostapd_config *conf = NULL; conf = (struct hostapd_config *)calloc(1, sizeof(*conf)); if (conf == NULL) { return NULL; } // set default value conf->beacon_int = 100; conf->channel = 1; return conf;}// 根据读取到的信息填充结构体static int config_defaults(struct hostapd_config *conf, const char *buf, char *pos, int line){ if (strcmp(buf, "interface") == 0) { strncpy(conf->iface, pos, sizeof(conf->iface)); } else if (strcmp(buf, "channel") == 0) { int val = atoi(pos); conf->channel = val; } else if (strcmp(buf, "beacon_int") == 0) { int val = atoi(pos); conf->beacon_int = val; } else if (strcmp(buf, "country_code") == 0) { memcpy(conf->country, pos, 2); conf->country[2] = ' '; } // more ... return 0;}//////////////////////////////////////// 读配置文件struct hostapd_config* config_read(const char *fname){ struct hostapd_config *conf = NULL; FILE *f = NULL; char buf[1024] = {0}; char *pos = NULL; int line = 0; int errors = 0; f = fopen(fname, "r"); if (f == NULL) { printf("Could not open configuration file '%s' for reading.\n", fname); return NULL; } conf = config_defaults(); if (conf == NULL) { fclose(f); return NULL; } while (fgets(buf, sizeof(buf), f)) { line++; if (buf[0] == '#') continue; pos = buf; while (*pos != '\0') { if (*pos == '\n') { *pos = '\0'; break; } pos++; } if (buf[0] == '\0') continue; pos = strchr(buf, '='); if (pos == NULL) { printf("Line %d: invalid line '%s'\n", line, buf); errors++; continue; } *pos = '\0'; pos++; errors += config_defaults(conf, buf, pos, line); } fclose(f); return conf;}/////////////////////////////////////int main(int argc, char *argv[]){ const char* conf_file = "foo.conf"; if (argc == 2) { conf_file = argv[1]; } struct hostapd_config *conf = NULL; conf = config_read(conf_file); if (conf == NULL) { printf("failed to read file: %s\n", conf_file); return -1; } printf("%d %s %s\n", conf->channel, conf->country, conf->iface); return 0;}
李迟 2016.8.21 周日
0 0
- Linux C代码实现读取配置文件示例
- Linux下配置文件读取操作流程及其C代码实现
- Linux下配置文件读取操作流程及其C代码实现
- Linux C语言实现读取ini配置文件
- Linux C实现小项目配置文件读取
- 【转】Linux下配置文件读取操作流程及其C代码实现
- linux c读取配置文件
- linux c 读取配置文件
- 详细介绍了Linux下配置文件的读取方法及fgyhtrh读取操作的C代码实现
- C语言读取配置文件代码
- Jdbc读取配置文件代码实现
- 读取配置文件源代码[linux c]
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- linux读取配置文件(C语言版)
- 快排单链表
- 单元测试
- Vcl控件详解
- activiti工作流06-任务分支
- xcode git设置用户命令
- Linux C代码实现读取配置文件示例
- python中文注释
- 关于Java中反射和注解的使用
- 7、分类
- windows平台下的eclipse远程连接cdh5
- .a文件如何打包到Android项目中
- spring data jpa 懒加载 处置
- Android studio遇到 java.lang.OutOfMemoryError: GC app:transformClassesWithDexForDebug解决方法 以及gradle优化
- Qt中int转换成QString