读取到配置文件的C语言的接口实现
/*********************************************************************
* Author : Samson
* Date : 03/13/2015
* Test platform:
* 3.13.0-24-generic
* GNU bash, 4.3.11(1)-release
* *******************************************************************/
为了完毕读取系统中的配置文件的某个key键的值。因为使用别人的库总是不爽,并且对于格式有一定的要求,那么就自己来写一个这种接口以供使用了。实现原理非常easy,通过打开配置文件,进行一行一行的读取,对照行中是否存在key串且此key串的下一个字符是否为'=',若是。则得到'='号之后的值。
注意:此实现方法仅仅适用于key=value这种配置格式,而不是非常多配置文件的key="value"的格式。
下面即是此接口的实现及測试代码:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int get_conf_value(char *file_path, char *key_name, char *value)
{
FILE *fp = NULL;
char *line = NULL, *substr = NULL;
size_t len = 0, tlen = 0;
ssize_t read = 0;
if(file_path == NULL || key_name == NULL || value == NULL)
{
printf("paramer is invaild!\n");
return -1;
}
fp = fopen(file_path, "r");
if (fp == NULL)
{
printf("open config file is error!\n");
return -1;
}
while ((read = getline(&line, &len, fp)) != -1)
{
substr = strstr(line, key_name);
if(substr == NULL)
{
continue;
}
else
{
tlen = strlen(key_name);
if(line[tlen] == '=')
{
strncpy(value, &line[tlen+1], len-tlen+1);
printf("config file format is invaild tlen is %d len is %d\n", tlen, len);
tlen = strlen(value);
printf("get value is %s tlen is %d\n", value, tlen);
//replace enter key
*(value+tlen-1) = '\0';
break;
}
else
{
printf("config file format is invaild tlen is %d len is %d\n", tlen, len);
fclose(fp);
return -2;
}
}
}
if(substr == NULL)
{
printf("key: %s is not in config file!\n", key_name);
fclose(fp);
return -1;
}
free(line);
fclose(fp);
return 0;
}
int main()
{
char getva[128] = {0};
char pathname_key[] = "Path";
char profilename[] = "/home/ufo/.mozilla/firefox/profiles.ini";
int ret = get_conf_value(profilename, pathname_key, getva);
if(ret == 0)
printf("get pathname_key's value from profile:%s is %s\n", profilename, getva);
return ret;
}
当中profilename是firefox的配置文件。获取key:Path的值。执行结果例如以下:
ufo@ufo:~/$ ./a.out
config file format is invaild tlen is 4 len is 120
get value is cojs83dh.default
tlen is 17
get pathname_key's value from profile:/home/ufo/.mozilla/firefox/profiles.ini is cojs83dh.default
配置文件的内容例如以下:
ufo@ufo:~$ cat /home/ufo/.mozilla/firefox/profiles.ini
[General]
StartWithLastProfile=1
[Profile0]
Name=default
IsRelative=1
Path=cojs83dh.default
Default=1
读取到配置文件的C语言的接口实现的更多相关文章
- Python读取ini配置文件(接口自动测试必备)
前言 大家应该接触过.ini格式的配置文件.配置文件就是把一些配置相关信息提取出去来进行单独管理,如果以后有变动只需改配置文件,无需修改代码. 特别是后续做自动化的测试,代码和数据分享,进行管理.比如 ...
- SpringBoot中如何优雅的读取yml配置文件?
YAML是一种简洁的非标记语言,以数据为中心,使用空白.缩进.分行组织数据,从而使得表示更加简洁易读.本文介绍下YAML的语法和SpringBoot读取该类型配置文件的过程. 本文目录 一.YAML基 ...
- java读取properties配置文件信息
一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...
- Java读取Properties配置文件
1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,使用键值对的形式来保存属性集.不过Properties的键和值都是字符串 ...
- java读取.properties配置文件的几种方法
读取.properties配置文件在实际的开发中使用的很多,总结了一下,有以下几种方法(仅仅是我知道的):一.通过jdk提供的java.util.Properties类.此类继承自java.util. ...
- 依赖注入之setter注入---只需修改配置,电脑就可以安装不同的打印机;读取properties配置文件并创建实例;实现不采用new的方式直接实例化对象
1.项目截图 2.黑白打印机类 package com.example.demo.printer; public class GrayPrinter implements Printer{ @Over ...
- 读取HeidiSQL 配置文件中的密码
读取HeidiSQL 配置文件中的密码 2017-1-21 5:42:01 codegay HeidiSQL是一款开源的SQL管理工具,用管理MYSQL,MSSQL 等数据库, 很多管理工具都会把密码 ...
- R语言数据接口
R语言数据接口 R语言处理的数据一般从外部导入,因此需要数据接口来读取各种格式化的数据 CSV # 获得data是一个数据帧 data = read.csv("input.csv" ...
- 【转载】java读取.properties配置文件的几种方法
读取.properties配置文件在实际的开发中使用的很多,总结了一下,有以下几种方法(仅仅是我知道的):一.通过jdk提供的java.util.Properties类.此类继承自java.util. ...
随机推荐
- ACM_开挂的小G
开挂的小G Time Limit: 2000/1000ms (Java/Others) Problem Description: 小G寒假在家没网络,闲着没事干又看不下书,就玩起了单机游戏ACM_Ga ...
- ACM_最值差(线段树区间查询最值)
最值差 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定N个数A1A2A3A4...AN.求任意区间Ai到Aj中的最大数与最小 ...
- cms判断写法
cms比较容易写出循环的网页内容,对于有些循环的网页内容有不同css设定,这样在写cms时需要对循环做出条件判断:{if 判断条件}输出内容{else}输出内容{/if}.通过判断可以实现图片轮播效果 ...
- JS——offset
1.offsetWidth.offsetHeight返回盒子宽度和高度,包括padding与border,不包括margin 2.offsetLeft.offsetTop返回盒子距离定位盒子的x轴方向 ...
- [Windows Server 2008] DEDECMS(织梦)安全设置
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:DedeCms ...
- JavaScript定时器及其他
By Abyssly Jun 20 2014 Updated:Jun 20 2014 平时工作中不可避免地要嵌套网页,对JavaScript的深入了解还是很有必要滴.而JavaScript中一个容易让 ...
- CAD读取属性块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- 【Redis】一、Redis简介及五种数据类型
(一)Redis简介 Redis(Remote Dictionary Server)是一个使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value的开源 ...
- asp网站中使用百度ueditor教程.txt
1.根据网站类型及编码选择相应的ueditor版本,如我的网站编码为gb2312,则选择ueditor 1.43 asp gbk版.2.本机IE浏览器应为8.0或以上,8.0以下的ueditor 1. ...
- vue-router的基本使用和配置
1.在main.js文件中引入相关模块以及组件及实例化vue对象配置选项路由及渲染App组件 默认设置如下: import Vue from 'vue' import App from './App' ...