linux下C程序--读取配置文件--ini格式

合集下载

INI文件读写详解

INI文件读写详解
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // 同1(1)
LPCTSTR lpKeyName, // 同1(1)
LPCTSTR lpDefault, // 同1(1)
LPTSTR lpReturnedString, // 同1(1)
INI文件的读写详解
INI文件读写 文章指数:0 CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。
int i; //i指向数组chSectionNames的某个位置,从0开始,顺序后移
int j=0; //j用来保存下一个节名字符串的首地址相对于当前i的位置偏移量
int count=0; //统计节的个数
//CString name;
//char id[20];
//在Ex1目录下的ex1.ini中创建一个Test节,并在该节中创建一个键id,其值为xym
//若Ex1.ini文件与读写该文件的程序在同一个目录下,则上面语句也可写为:
::WritePrivateProfileString("Test","id","xym",".\\ex1.ini");
::GetPrivateProfileSectionNames(chSectionNames,2048,".\\ex1.ini");
for(i=0;i<2048;i++,j++)

C语言读取写入ini配置文件的方法实现

C语言读取写入ini配置文件的方法实现

C语⾔读取写⼊ini配置⽂件的⽅法实现⽬录⼀、了解什么是INI⽂件?⼆、INI⽂件的格式三、解析上述⽂件四、测试如下⼀、了解什么是INI⽂件?ini ⽂件是Initialization File的缩写,即初始化⽂件,这是⽤来配置应⽤软件以实现不同⽤户的要求。

⼆、INI⽂件的格式INI⽂件由节、键、值组成。

⼀个简单的的INI⽂件例⼦如下:[Setting]INIT_FLAG=0;VOLUME=1;LANGUAGE=1;如上例⼦,[Setting]就是节,=号左边的值是键,=号右边的是值。

三、解析上述⽂件/*ini.h*/#ifndef INI_H#define INI_H#include <stdio.h>#include <string.h>int GetIniKeyString(char *title,char *key,char *filename,char *buf);int PutIniKeyString(char *title,char *key,char *val,char *filename);#endif /*INI_H*//*ini.c*/#include <stdio.h>#include <string.h>/** 函数名: GetIniKeyString* ⼊⼝参数: title* 配置⽂件中⼀组数据的标识* key* 这组数据中要读出的值的标识* filename* 要读取的⽂件路径* 返回值:找到需要查的值则返回正确结果 0* 否则返回-1*/int GetIniKeyString(char *title,char *key,char *filename,char *buf){FILE *fp;int flag = 0;char sTitle[64], *wTmp;char sLine[1024];sprintf(sTitle, "[%s]", title);if(NULL == (fp = fopen(filename, "r"))) {perror("fopen");return -1;}while (NULL != fgets(sLine, 1024, fp)) {// 这是注释⾏if (0 == strncmp("//", sLine, 2)) continue;if ('#' == sLine[0]) continue;wTmp = strchr(sLine, '=');if ((NULL != wTmp) && (1 == flag)) {if (0 == strncmp(key, sLine, strlen(key))) { // 长度依⽂件读取的为准sLine[strlen(sLine) - 1] = '\0';fclose(fp);while(*(wTmp + 1) == ' '){wTmp++;}strcpy(buf,wTmp + 1);return 0;}} else {if (0 == strncmp(sTitle, sLine, strlen(sTitle))) { // 长度依⽂件读取的为准flag = 1; // 找到标题位置}}}fclose(fp);return -1;}/** 函数名: PutIniKeyString* ⼊⼝参数: title* 配置⽂件中⼀组数据的标识* key* 这组数据中要读出的值的标识* val* 更改后的值* filename* 要读取的⽂件路径* 返回值:成功返回 0* 否则返回 -1*/int PutIniKeyString(char *title,char *key,char *val,char *filename){FILE *fpr, *fpw;int flag = 0;char sLine[1024], sTitle[32], *wTmp;sprintf(sTitle, "[%s]", title);if (NULL == (fpr = fopen(filename, "r")))return -1;// 读取原⽂件sprintf(sLine, "%s.tmp", filename);if (NULL == (fpw = fopen(sLine, "w")))return -1;// 写⼊临时⽂件while (NULL != fgets(sLine, 1024, fpr)) {if (2 != flag) { // 如果找到要修改的那⼀⾏,则不会执⾏内部的操作wTmp = strchr(sLine, '=');if ((NULL != wTmp) && (1 == flag)) {if (0 == strncmp(key, sLine, strlen(key))) { // 长度依⽂件读取的为准flag = 2;// 更改值,⽅便写⼊⽂件sprintf(wTmp + 1, " %s\n", val);}} else {if (0 == strncmp(sTitle, sLine, strlen(sTitle))) { // 长度依⽂件读取的为准flag = 1; // 找到标题位置}}}fputs(sLine, fpw); // 写⼊临时⽂件}fclose(fpr);fclose(fpw);sprintf(sLine, "%s.tmp", filename);return rename(sLine, filename);// 将临时⽂件更新到原⽂件}上述两个函数是简单的解析函数,因为ini⽂件有很多种解析⽅式,根据不同的需求解析也不同所以要进⾏修改⽐如我的注释符号是 “ ;”,所以我需要修改并且根据实际功能需求也可以进⾏进⼀步的封装四、测试如下ini样本⽂件/*test.ini*/[city]beijing = hello-beijingshanghai = hello-shanghai#information[study]highschool = xxxxuniversity = yyyytest.c程序/*test.c*/#include "ini.h"#include <stdio.h>int main(int argc, char const *argv[]){char buff[100];int ret;ret = GetIniKeyString("city","beijing","./test.ini",buff);printf("ret:%d,%s\n",ret,buff);ret = GetIniKeyString("study","highschool","./test.ini",buff);printf("ret:%d,%s\n",ret,buff);ret = PutIniKeyString("study","highschool","zzzz","./test.ini");printf("put ret:%d\n",ret);ret = GetIniKeyString("study","highschool","./test.ini",buff);printf("ret:%d,%s\n",ret,buff);return 0;}结果如下:ret:0,hello-beijingret:0,xxxxput ret:0ret:0,zzzz相应的test.ini的study段highschool项变成了zzzz.这⾥还要注意,section使⽤中⽂字符可能会⽆法识别!到此这篇关于C语⾔读取写⼊ini配置⽂件的⽅法实现的⽂章就介绍到这了,更多相关C语⾔读取写⼊ini 内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

Linux下C语言的文件读写

Linux下C语言的文件读写

Linux下C语言的文件(fputc,fgetc,fwrite,fread对文件读写操作)//==================================fputc 向文件写入字符#include <stdio.h>#include <stdlib.h>main(){FILE *fp;char ch;if((fp=fopen("test.txt","w"))==NULL){printf("不能打开文件\n");exit(0);}while ((ch=getchar())!='\n')fputc( ch, fp );fclose(fp);}-------------小提示:fp=fopen("test.txt","w") ,把"w"改为"a" 可以创建文件并且追加写入内容exit(0); 需要包含stdlib.h 头文件,才能使用//============================================================fgetc 读取字符#include <stdio.h>#include <stdlib.h>main( int argc, char *argv[] ){char ch;FILE *fp;int i;if((fp=fopen(argv[1],"r"))==NULL){printf("不能打开文件\n");exit(0);}while ((ch=fgetc(fp))!=EOF)putchar(ch);fclose(fp);}文件结尾,通过判断EOF//============================================================== fwrite 的使用使数组或结构体等类型可以进行一次性读写#include <stdio.h>#include <stdlib.h>main(){FILE *fp1;int i;struct student{char name[10];int age;float score[2];char addr[15];}stu;if((fp1=fopen("test.txt","wb"))==NULL){printf("不能打开文件");exit(0);}printf("请输入信息,姓名年龄分数1 分数2 地址:\n");for( i=0;i<2;i++){scanf("%s %d %f %f %s",,&stu.age,&stu.score[0],&stu.score[1], stu.addr);fwrite(&stu,sizeof(stu),1,fp1);}fclose(fp1);}//=============================================================== fread 的使用#include <stdio.h>#include <stdlib.h>main(){FILE *fp1;int i;struct student{char name[10];int age;float score[2];char addr[15];}stu;if((fp1=fopen("test.txt","rb"))==NULL){printf("不能打开文件");exit(0);}printf("读取文件的内容如下:\n");for (i=0;i<2;i++){fread(&stu,sizeof(stu),1,fp1);printf("%s %d %7.2f %7.2f %s\n",,stu.age,stu.score[0],stu.score[1],stu.addr);}fclose(fp1);}。

ini文件用法 -回复

ini文件用法 -回复

ini文件用法-回复Ini文件用法Ini文件是一种常见的配置文件格式,它被广泛应用于各种软件和操作系统中。

它的简洁和易于使用使得它成为配置文件的首选格式之一。

本文将逐步介绍ini文件的用法,并对其常见的操作进行详细解释。

I. 什么是Ini文件?Ini文件是一种普遍存在于Windows操作系统中的配置文件格式。

它由一系列节(section)和键值对(key-value pair)组成,用于存储和传递应用程序的配置信息。

Ini文件中的每个节都被方括号([])包围,而键值对则以键和值之间的等号(=)进行分隔。

II. Ini文件的基本语法一个基本的Ini文件由多个节组成,每个节都由方括号括起来。

每个节下面可以有多个键值对,键和值之间用等号连接。

例如:[section1]key1=value1key2=value2[section2]key3=value3key4=value4III. Ini文件的读写操作Ini文件常用于存储应用程序的配置信息。

在应用程序中,可以使用各种编程语言提供的函数或库来读取和写入Ini文件。

以下是一些常见的读写操作:1. 读取Ini文件读取Ini文件可以根据需要读取整个文件,或者只读取特定节或键的值。

大多数编程语言都提供了相应的函数或库来实现这些操作。

读取整个Ini 文件的示例代码如下:pythonimport configparserconfig = configparser.ConfigParser()config.read('config.ini')print(config.sections()) # 打印所有的节print(config['section1']['key1']) # 打印指定节的指定键的值上述示例代码使用了Python的configparser库来读取Ini文件。

configparser模块提供了ConfigParser类,它提供了简洁而强大的方法来读取和写入Ini文件。

归纳整理Linux下C语言常用的库函数----文件操作

归纳整理Linux下C语言常用的库函数----文件操作

归纳整理Linux下C语⾔常⽤的库函数----⽂件操作在没有IDE的时候,记住⼀些常⽤的库函数的函数名、参数、基本⽤法及注意事项是很有必要的。

参照Linux_C_HS.chm的⽬录,我⼤致将常⽤的函数分为⼀下⼏类:1. 内存及字符串控制及操作2. 字符串转换3. 字符测试4. ⽂件操作5. 时间⽇期6. 常⽤数学函数7. ⽂件内容操作8. ⽂件权限控制9. 进程操作10. 线程操作11. Socket操作12. 信号处理13. 数据结构及算法这次主要总结的是上⾯⿊⾊部分,关于⽂件操作的函数。

系统调⽤归类** 函数名⽤法备注**1. int open(const char *pathname, int flags); open and possibly create a file or device flags 必须包含O_RDONLY, O_WRONLY, or O_RDWR中的任何⼀个**2. int open(const char *pathname, int flags, mode_t mode); UP mode只是在flags中包含O_CREAT时才有效**3. int fsync(int fd); synchronize a file's in-core state with storage device 写完数据close前必须先同步,以防意外**4. off_t lseek(int fd, off_t offset, int whence); 定位⽂件位置第三个参数可以为SEEK_SET SEEK_CUR SEEK_END**5. ssize_t read(int fildes, void *buf, size_t nbyte); UP ⽂件位置会随读取的字节数移动**6. ssize_t write(int fildes, const void *buf, size_t nbyte); UP UP**7. int close(int fd); UP UP**8. void *mmap(void *addr, size_t length, int prot, int flags, 内存映射先⽤fstat得到⽂件⼤⼩,然后使⽤该函数将⽂件内容映射到内存中,然后就可以int fd, off_t offset); 直接调⽤字符串函数操作。

c读取配置文件的方法

c读取配置文件的方法

c读取配置文件的方法在C语言中,读取配置文件是一项非常常见的任务。

配置文件通常包含了程序运行时需要的各种参数和设置,因此读取配置文件是程序启动时必须完成的任务之一。

本文将介绍如何使用C语言读取配置文件。

我们需要了解配置文件的格式。

配置文件通常是一个文本文件,其中包含了一系列的键值对。

每个键值对由一个键和一个值组成,中间用等号连接。

例如:```key1=value1key2=value2key3=value3```在C语言中,我们可以使用标准库中的fopen函数打开配置文件。

例如:```cFILE *fp = fopen("config.ini", "r");```这里我们打开了一个名为config.ini的文件,并以只读模式打开。

接下来,我们可以使用标准库中的fgets函数逐行读取配置文件。

例如:```cchar line[256];while (fgets(line, sizeof(line), fp)) {// 处理每一行}```这里我们定义了一个长度为256的字符数组line,然后使用fgets 函数逐行读取配置文件。

fgets函数的第一个参数是一个字符数组,用于存储读取到的行;第二个参数是字符数组的长度;第三个参数是文件指针,用于指定要读取的文件。

接下来,我们需要解析每一行的键值对。

我们可以使用标准库中的strtok函数将每一行按照等号分割成键和值。

例如:```cchar *key = strtok(line, "=");char *value = strtok(NULL, "=");```这里我们使用strtok函数将line按照等号分割成两个部分,分别是键和值。

strtok函数的第一个参数是要分割的字符串;第二个参数是分割符,这里是等号。

strtok函数会返回分割后的第一个部分,我们可以使用NULL作为第一个参数来获取分割后的第二个部分。

ini文件格式读取

ini文件格式读取

GetProfileString - 从 Win.ini 文件的某个 Section 取得一个 key 的字符串,它的原形是:
GetProfileString(
LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名称的字符串地址
DWORD nSize // 返回数据的缓冲区长度
);
WriteProfileSection - 将一个整个 Section 的值 写入 Win.ini 文件的指定 Section 中,它的原形是:
WriteProfileSection(
LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址
ini 文件是文本文件,中间的数据格式一般为:
[Section1 Name]
KeyName1=value1
KeyName2=value2
...
[Section2 Name]
KeyName1=value1
KeyName2=value2
ini 文件可以分为几个 Section,每个 Section 的名称用 [] 括起来,在一个 Section 中,可以有很多的 Key,每一个 Key 可以有一个值并占用一行,格式是 Key=value,Win32 对 ini 文件操作的 api 中,有一部分是对 win.ini 操作的,有一部分是对用户自定义的 ini 文件操作的。Win.in 和 system.ini 是Windows的两个非常重要的初始化文件,Windows将用户所作的选择以及各种变化的系统信息记录在这两个文件中。System.ini 描述了系统硬件的当前状态,Win.ini 文件则包含了Windows 系统运行环境的当前配置。由于 Win.ini 文件的重要性和常用性,Win32 中有专门对 Win.ini 进行操作的 api,它们是:

嵌入式Linux软件如何进行数据参数保存

嵌入式Linux软件如何进行数据参数保存

嵌入式Linux软件如何进行数据参数保存大多数软件开发都会涉及到数据参数的保存与读取,小至运行的单片机的软件,大至操作系统级别的软件(如linux,windows,mac),均会有专门的子程序或者模块进行参数的保存和读取。

不同的平台下开发,参数的保存与读取会存在一定的差异化,例如,单片机下,保存参数是写入eeprom或者 rom,windows和linux下的软件则会以配置文件的形式保存参数。

下面以我以前在工作中所遇到情况,重点写写嵌入式linux软件是如何进行的数据参数的保存。

一以二进制数据保存参数。

以二进制形式保存参数是很是常见的一种方案,也是很多项目组用于保存参数的一种方案。

以我们现有的软件平台中的方案为例吧。

我们的软件平台基于嵌入式linux,flash芯片容量是16M,flash 芯片被分为了五个区,如下所示,其中parameter 分区用于数据参数的存储。

| uboot | kernel | rootfs | app | parameter |----------------------------------------------------------------------------- uboot 分区对应设备文件/dev/mtdblock0kernel 分区对应设备文件/dev/mtdblock1rootfs 分区对应设备文件/dev/mtdblock2app 分区对应设备文件/dev/mtdblock3parameter 分区对应设备文件/dev/mtdblock4假设我们想要保存用户名与密码。

1 定义一个结构体,结构体成员包含用户名与密码struct _Parameter{char usename[16];char password[16];};int fd = -1;fd = open(/dev/mtdblock5, O_RDWR);struct _Parameter sys_parameter;2 填充sys_parameter的成员usename和password,假若username为dodolook,密码为123456strncpy(sys_ername, &ldquo;dodolook&rdquo;, 16);strncpy(sys_parameter.password, &ldquo;123456&rdquo;, 16);3 将sys_parameter以二进制的形式写入flash分区5的映射的设备文件/dev/mtdblock4. write(fd, &amp;sys_parameter, sizeof(struct _Parameter));参数的读取从设备文件/dev/mtdblock4读取sizeof(struct _Parameter)大小的字节到所定义的参数结构体sys_parameter的变量地址。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
break; } else {
szLine[i++] = rtnval; } if(rtnval == '\n') {
szLine[--i] = '\n'; i = 0;
1/3
tmp = strchr(szLine, '='); if((tmp != NULL) && (flag == 1)) {
if(strstr(szLine, key)Байду номын сангаас!= NULL) {
//comment if('#' == szLine[0]); else if('/' == szLine[0] && '/' == szLine[1]); else {
//local key position strcpy(tmpstr, tmp+1); fclose(fp); return tmpstr; } } } else { strcpy(tmpstr, "["); strcat(tmpstr, title); strcat(tmpstr, "]"); if(strncmp(tmpstr, szLine, strlen(tmpstr)) == 0) { //encounter title flag = 1; } } } } fclose(fp); return ""; } int get_int_from_ini(char *title, char *key, char *filename) { return atoi(get_string_from_ini(title, key, filename)); } int main(int argc, char **argv) { char name[1024]; int age = 0; memset(name, 0, sizeof(name)); age = get_int_from_ini("test", "age", argv[1]); strcpy(name, get_string_from_ini("test", "name", argv[1])); //puts(name); printf("%s", name); printf("age = %d\n", age); }
2/3
3/3
读取配置文件的程序: #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <stdarg.h> //read string from config file char *get_string_from_ini(char *title, char *key, char *filename) {
ini格式
在Windows下可以用GetPrivateProfileString或GetPrivateProfileInt方便读取.ini配置文件内容, 但是在Linux平台上就一筹莫展了。 为了解决该问题,打算用C来读取.ini,就可以不受平台的限制了。 配置文件Config.ini [test] name=elikang age=12
FILE *fp; char szLine[1024]; static char tmpstr[1024]; int rtnval; int i = 0; int flag = 0; char *tmp; if((fp = fopen(filename, "r")) == NULL) {
perror("fopen()"); return NULL; } while(!feof(fp)) { rtnval = fgetc(fp); if(rtnval == EOF) {
相关文档
最新文档