一.代码部分
#include <stdio.h>
#include <string.h>
#define FILENAME "./configure.txt"
#define PROFILE_DELIMITER "="
struct id_info{
char name[16];
char sex[8];
char national[16];
char birth[16];
char address[16];
char id[32];
int struct_len;
};
int ConfigureOneMemberOfTheStructure(const char *filename, char *grep, const char *cut,const int grep_len);
int ConfigureAllMembersOfTheStructure(const char *filename, const char *cut ,struct id_info *p_s);
int PrintStructure(const struct id_info s);
int main(void)
{
struct id_info she_info={"name", "sex", "national", "birth", "address", "id", 6};
ConfigureAllMembersOfTheStructure(FILENAME, PROFILE_DELIMITER, &she_info);
PrintStructure(she_info);
return 0;
}
//配置结构体中一个变量
int ConfigureOneMemberOfTheStructure(const char *filename, char *grep, const char *cut,const int grep_len)
{
//拼接成一条shell命令
char str[128]="cat ";
strcat(str, filename);
strcat(str, " | grep ");
strcat(str, grep);
strcat(str, " | cut -d ");
strcat(str, cut);
strcat(str, " -f 2");
//执行shell命令,目的是把配置文件的匹配内容赋值给变量
FILE *fp=NULL;
fp = popen(str, "r");
if(!fp){
printf("popen failed!\n");
return -1;
}
memset(str,0,128);
int rev = fread(grep,1,grep_len,fp);
grep[rev-1]='\0';
pclose(fp);
fp=NULL;
return 0;
}
//配置结构体中的全部变量
int ConfigureAllMembersOfTheStructure(const char *filename, const char *cut, struct id_info *p_s)
{
int i = 0;
char *p_mem[6] = {p_s->name, p_s->sex, p_s->national, p_s->birth, p_s->address, p_s->id};
int len_mem[] = {sizeof(p_s->name),sizeof(p_s->sex),sizeof(p_s->national),
sizeof(p_s->birth),sizeof(p_s->address),sizeof(p_s->id)};
for(i = 0;i < p_s->struct_len;i++){
ConfigureOneMemberOfTheStructure(filename, p_mem[i], cut, len_mem[i]);
}
return 0;
}
//打印全部的结构体变量
int PrintStructure( struct id_info s)
{
int i = 0;
char *p_mem[6] = {s.name, s.sex, s.national, s.birth, s.address, s.id};
printf("<----------------structure begin--------------------->\n");
for(i = 0;i < s.struct_len;i++){
printf("%s\n",p_mem[i]);
}
printf("<----------------structure end------------------------>\n");
return 0;
}
二.运行结果