c语言写配置文件|怎么使用C语言读取properties配置文件

|

㈠ c语言怎么加载自己写的配置文件

我是这么做的,比如 ini 里以 #注释,以=表示赋值## Note #aaa=bbb我从ini里一行一行读出来,如果第一个字母是#,就忽略否则就从 line_of_file 里查找 “=”字符,(去掉行末'\n'换行符)=之前的就是参数名,=之后的就是参数值(去掉空格,tab)(用strncpy)

㈡ 怎么使用C语言读取properties配置文件

用C语言读取properties配置文件的方法:1、找到配置路径下的properties文件2、按行读取文件内容版具体实现代码权如下://定义读入的行数组,1024行char line[1024];//存放配置项数组settingint setting[N],i = 0;//开始循环读入while(fgets(fp,line,1024) != NULL){ //读入配置的值给line变量 fscanf(line,"setting%*d = %d",&setting[i++]);}

㈢ 怎么使用C语言读取properties配置文件

用C语言读取properties配置文件的方法:1、找到配置路径下的properties文件2、按行读取文件内版容具体实现代码如下:权//定义读入的行数组,1024行char line[1024];//存放配置项数组settingint setting[N],i = 0;//开始循环读入while(fgets(fp,line,1024) != NULL){ //读入配置的值给line变量 fscanf(line,"setting%*d = %d",&setting[i++]);}

㈣ c语言读取txt配置文件,应该怎样编写程序

这些宏定义是文件的一部分吗?在c语言里有操作文件系统文件的接口函数,open、read、write、close。然后就对文件写字符串就行了。读取就是读取字符串。

㈤ Ubuntu如何用C语言写从系统配置文件中读取ip和端口的相关代码

可以写成命令行参数的模式的,不用修改代码,形如:./server192.168.1.11210088./client192.168.1.11210088

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

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

㈦ C语言操作yaml配置文件通用操作工具

在go语言中使用viper之类的库很方便的处理yaml配置文件,但是在c语言中就比较麻烦,经过一番思索和借助强大的github,发现了一个libyaml c库,但是网上的例子都比较麻烦,而且比较繁琐,就想法作了一个相对比较容易配置的解析应用,可以简单地类似viper 的模式进行配置实现不同的配置文件读取。如你的配置文件很复杂请按格式修改KeyValue 全局变量,欢迎大家一起完善 库请自行下载 GitHub – yaml/libyaml: Canonical source repository for LibYAML 直接上代码 yaml示例文件 %YAML 1.1 — mqtt: subtopic: "Control/#" pubtopic: "bbt" qos: 1 serveraddress: "tcp://192.168.0.25:1883" clientid: "kvm_test" writelog: false writetodisk: false outputfile: "./receivedMessages.txt" hearttime: 30 #ifndef __CONFIG_H__ #define __CONFIG_H__ #ifdef __cplusplus extern "C" { #endif /************************/ /* Minimum YAML version */ /************************/#define YAML_VERSION_MAJOR 1 #define YAML_VERSION_MINOR 1 #define STRUCT_TYPE_NAME 100 #define INT_TYPE_NAME 101 #define STRING_TYPE_NAME 102 #define BOOL_TYPE_NAME 103 #define FLOAT_TYPE_NAME 104 #define MAP_TYPE_NAME 105 #define LIST_TYPE_NAME 106 typedef struct{ char *key; void *value; int valuetype; char *parent; }KeyValue,*pKeyValue;#ifdef __cplusplus } #endif #endif #include #include #include #include #include #include #include #include "config.h" typedef struct { char *SUBTOPIC; //string `yaml:"subtopic" mapstructure:"subtopic"` //"topic1" char *PUBTOPIC; //string `yaml:"pubtopic" mapstructure:"pubtopic"` int QOS; //byte `yaml:"qos" mapstructure:"qos"` //1 char *SERVERADDRESS; //string `yaml:"serveraddress" mapstructure:"serveraddress"` //= "tcp://mosquitto:1883" char *CLIENTID; //string `yaml:"clientid" mapstructure:"clientid"` //= "mqtt_subscriber" int HEARTTIME; //int `yaml:"hearttime" mapstructure:"hearttime"` // CommandLocalPath string `yam:"commanlocalpath"` }mqttSection,*pmqttSection; typedef struct { mqttSection Mqtt;// `yaml:"mqtt" mapstructure:"mqtt"` // KVM kvmSection `yaml:"kvm" mapstructure:"kvm"` }ConfigT; ConfigT config; static KeyValue webrtcconfig[]={ {"mqtt",&config,STRUCT_TYPE_NAME,NULL}, {"subtopic",&(config.Mqtt.SUBTOPIC),STRING_TYPE_NAME,"mqtt"}, {"pubtopic",&(config.Mqtt.PUBTOPIC),STRING_TYPE_NAME,"mqtt"}, {"qos",&(config.Mqtt.QOS),INT_TYPE_NAME,"mqtt"}, {"serveraddress",&(config.Mqtt.SERVERADDRESS),STRING_TYPE_NAME,"mqtt"}, {"clientid",&(config.Mqtt.CLIENTID),STRING_TYPE_NAME,"mqtt"}, {"hearttime",&(config.Mqtt.HEARTTIME),INT_TYPE_NAME,"mqtt"}, {NULL,NULL,0,NULL}, }; int printConfig(ConfigT * pconfig){ if(pconfig==NULL) return -1; printf("mqtt:r "); if(pconfig->Mqtt.SUBTOPIC!=NULL) {printf("subtopic: %sr ",pconfig->Mqtt.SUBTOPIC); } if(pconfig->Mqtt.SUBTOPIC!=NULL) {printf("pubtopic: %sr ",pconfig->Mqtt.PUBTOPIC); } printf("qos: %dr ",config.Mqtt.QOS); if(pconfig->Mqtt.SERVERADDRESS!=NULL) {printf("serveraddress: %sr ",pconfig->Mqtt.SERVERADDRESS); } if(pconfig->Mqtt.CLIENTID!=NULL) {printf("clientid: %sr ",pconfig->Mqtt.CLIENTID); } printf("hearttime: %dr ",config.Mqtt.HEARTTIME);} int freeConfig(ConfigT * pconfig){ if(pconfig==NULL) return -1; if(pconfig->Mqtt.SERVERADDRESS!=NULL) {free(pconfig->Mqtt.SERVERADDRESS); } if(pconfig->Mqtt.CLIENTID!=NULL) {free(pconfig->Mqtt.CLIENTID); } if(pconfig->Mqtt.SUBTOPIC!=NULL) {free(pconfig->Mqtt.SUBTOPIC); } } char currentkey[100]; void getvalue(yaml_event_t event,pKeyValue *ppconfigs){ char *value = (char *)event.data.scalar.value; pKeyValue pconfig=*ppconfigs; char *pstringname; while(pconfig->key!=NULL){ if(currentkey[0]!=0){ if(!strcmp(currentkey,pconfig->key)) { switch(pconfig->valuetype){ case STRING_TYPE_NAME: pstringname=strp(value); printf("get string value %sr ",pstringname); *((char**)pconfig->value)=pstringname; memset(currentkey, 0, sizeof(currentkey)); break; case INT_TYPE_NAME: *((int*)(pconfig->value))=atoi(value); memset(currentkey, 0, sizeof(currentkey)); break; case BOOL_TYPE_NAME: if(!strcmp(value,"true")) *((bool*)(pconfig->value))=true; else *((bool*)(pconfig->value))=false; memset(currentkey, 0, sizeof(currentkey)); break; case FLOAT_TYPE_NAME: *((float*)(pconfig->value))=atof(value); memset(currentkey, 0, sizeof(currentkey)); break; case STRUCT_TYPE_NAME: case MAP_TYPE_NAME: case LIST_TYPE_NAME: memset(currentkey, 0, sizeof(currentkey)); strncpy(currentkey,value,strlen(value)); break; default: break; } break; } //continue; }else{ if(!strcmp(value,pconfig->key)){ strncpy(currentkey,pconfig->key,strlen(pconfig->key)); break; } } pconfig++; } } int Load_YAML_Config( char *yaml_file, KeyValue *(configs[]) ) {struct stat filecheck; yaml_parser_t parser; yaml_event_t event; bool done = 0; unsigned char type = 0; unsigned char sub_type = 0; if (stat(yaml_file, &filecheck) != false ) { printf("[%s, line %d] Cannot open configuration file '%s'! %s", __FILE__, __LINE__, yaml_file, strerror(errno) ); return -1; }FILE *fh = fopen(yaml_file, "r");if (!yaml_parser_initialize(&parser)) { printf("[%s, line %d] Failed to initialize the libyaml parser. Abort!", __FILE__, __LINE__); return -1; }if (fh == NULL) { printf("[%s, line %d] Failed to open the configuration file '%s' Abort!", __FILE__, __LINE__, yaml_file); return -1; } memset(currentkey, 0, sizeof(currentkey)); /* Set input file */yaml_parser_set_input_file(&parser, fh);while(!done) {if (!yaml_parser_parse(&parser, &event)) {/* Useful YAML vars: parser.context_mark.line+1, parser.context_mark.column+1, parser.problem, parser.problem_mark.line+1, parser.problem_mark.column+1 */printf( "[%s, line %d] libyam parse error at line %ld in '%s'", __FILE__, __LINE__, parser.problem_mark.line+1, yaml_file); }if ( event.type == YAML_DOCUMENT_START_EVENT ) { //yaml file first line is version //%YAML 1.1 //— yaml_version_directive_t *ver = event.data.document_start.version_directive;if ( ver == NULL ) { printf( "[%s, line %d] Invalid configuration file. Configuration must start with "%%YAML 1.1"", __FILE__, __LINE__); }int major = ver->major; int minor = ver->minor;if (! (major == YAML_VERSION_MAJOR && minor == YAML_VERSION_MINOR) ) { printf( "[%s, line %d] Configuration has a invalid YAML version. Must be 1.1 or above", __FILE__, __LINE__); return -1; }}else if ( event.type == YAML_STREAM_END_EVENT ) {done = true;}else if ( event.type == YAML_MAPPING_END_EVENT ) {sub_type = 0;}else if ( event.type == YAML_SCALAR_EVENT ) { getvalue(event,configs); } } return 0; }int main(int argc, char *argv[]){ pKeyValue pconfig=&webrtcconfig[0]; Load_YAML_Config("../../etc/kvmagent.yml",&pconfig); printConfig(&config); freeConfig(&config); }

㈧ c语言怎么把宏定义的数据配置到文件中,当需要更改某些数据时,不需要打开程序,在文件中直接修改。

无论是头文件还是源文抄件 不安装编译环境的情况下 用txt 打开基本也没问题 只是有的时候需要改变下打开方式如果是需要把数据配置到文件中 那么就要用到C语言的文件操作功能。设定为在程序运行时读入指定位置的文件数据,按一定规则赋值给其他变量就行。具体操作可以 网络文库 C语言文件操作但是这种方法不是用在宏定义上,宏只是一种编译前的替换,如果这个程序已经编译好了 就算能通过文本修改也没用 除非 再次编译。如果非要实现相近的功能 可以不定义宏,而是通过文件操作功能。在用到相关变量的时候通过文件读取获的。这样就能在不用再次编译的条件下,实现修改。

㈨ 怎么使用C语言读取properties配置文件

用C语言读取properties配置文件的方法:1、找到配置路径下的properties文件2、按行读取文件内容具体实现代码如下://定义读入的行数组,1024行charline[1024];//存放配置项数组settingintsetting[N],i=0;//开始循环读入while(fgets(fp,line,1024)!=NULL){//读入配置的值给line变量fscanf(line,"setting%*d=%d",&setting[i++]);}

㈩ c语言读写配置文件

#include <stdio.h>#include <string.h>#define MAX_BUF 20#define SERVER "localhost"#define CONFIG_FILE "1.conf"bool SetAuthServer(char* strServerAdd){ char buf[MAX_BUF], tempBuf[MAX_BUF]; memset(buf, 0, MAX_BUF); memset(tempBuf, 0, MAX_BUF); FILE *pF = fopen(CONFIG_FILE, "r"); if(!pF) { printf("打开文件失败!\n"); return false; } fread(buf, MAX_BUF, 1, pF); if(!feof(pF)) { printf("读取不完整,请把MAX_BUF设置为大一点, 当前大小为: %d\n", MAX_BUF); fclose(pF); return false; } fclose(pF); char *lpPos = buf; char *lpNewPos = buf; while(lpNewPos = strstr(lpPos, SERVER)) { strncpy(tempBuf+strlen(tempBuf), lpPos, lpNewPos-lpPos); strcat(tempBuf, strServerAdd); lpPos = lpNewPos + strlen(SERVER); } strcat(tempBuf, lpPos); pF = fopen(CONFIG_FILE, "w"); if(!pF) { printf("打开文件失败!\n"); return false; } fwrite(tempBuf, strlen(tempBuf), 1, pF); fclose(pF); return true;}void main(){ char buf[20]; printf("请输入一个字符串来修改服务器配置: "); scanf("%s", buf); if(SetAuthServer(buf) == true) printf("修改成功!\n"); else printf("修改失败!\n"); }


赞 (0)