⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rwini.c

📁 一个用于银行视频联播网中客户端广告机的网络通信部分
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "rwini.h"
#include "SmBsString.h"

#define MAX_CFG_BUF 512 

#define CFG_OK 0 
#define CFG_SECTION_NOT_FOUND -1 
#define CFG_KEY_NOT_FOUND -2 
#define CFG_ERR -10 
#define CFG_ERR_FILE -10 
#define CFG_ERR_OPEN_FILE -10 
#define CFG_ERR_CREATE_FILE -11 
#define CFG_ERR_READ_FILE -12 
#define CFG_ERR_WRITE_FILE -13 
#define CFG_ERR_FILE_FORMAT -14 
#define CFG_ERR_SYSTEM -20 
#define CFG_ERR_SYSTEM_CALL -20 
#define CFG_ERR_INTERNAL -21 
#define CFG_ERR_EXCEED_BUF_SIZE -22 

#define COPYF_OK 0 
#define COPYF_ERR_OPEN_FILE -10 
#define COPYF_ERR_CREATE_FILE -11 
#define COPYF_ERR_READ_FILE -12 
#define COPYF_ERR_WRITE_FILE -13 

#define TXTF_OK 0 
#define TXTF_ERR_OPEN_FILE -1 
#define TXTF_ERR_READ_FILE -2 
#define TXTF_ERR_WRITE_FILE -3 
#define TXTF_ERR_DELETE_FILE -4 
#define TXTF_ERR_NOT_FOUND -5 

char Lsymbol = '[', Rsymbol = ']';
char Nsymbol = '#'; /*remark symbol*/
int CFG_section_line_no, CFG_key_line_no, CFG_key_lines; 

// extern int my_strchr(char str [ ], char str1 [ ], char ch);
 
 int  strTrimlr(char buffer[])
 {
     char * bori,*eori, *des;
     int length,count;
     
     bori = buffer;
     while ( *bori != '\0' )
     {
         if ( *bori != ' ')  break;         
         bori ++;
     }
   
     /*Move to the finnal */
     length = strlen( buffer );
     eori = buffer +   length - 1;
         
     while ( eori >= bori )
     {
         if ( *eori != ' ')  break;         
         eori --;
     }
    
     count = 0; 
     while ( eori >= bori )
     {
         buffer[count++] = *bori;    
         bori ++;
     }
   buffer[count] ='\0';
   return count;
 }
 
int FGetLine(FILE *fp, char *buffer, int maxlen)
{
int i, j; 
char ch1; 

for(i = 0, j = 0; i < maxlen; j++) 
{ 
if(fread(&ch1, sizeof(char), 1, fp) != 1) 
{ 
if(feof(fp) != 0) 
{ 
if(j == 0) return -1; /* file end EOF */ 
else break; 
} 
if(ferror(fp) != 0) return -2; /* read file error*/ 
return -2; 
} 
else 
{ 
if(ch1 == '\n' || ch1 == 0x00) break; /* jump line to next line */ 
if(ch1 == '\f' || ch1 == 0x1A) 
{ 
buffer[i++] = ch1; 
break; 
} 

if(ch1 != '\r') buffer[i++] = ch1; 
} 
} 
buffer[i] = '\0'; 
return i; 
} 

void FileCopy(char *source_file, char *dest_file)
{ 
FILE *fp1, *fp2; 
char buf[1024+1]; 

if((fp1 = fopen((char *)source_file, "r")) == NULL) 
return ; 
if((fp2 = fopen((char *)dest_file, "w")) == NULL) 
  perror("file0 open!");
while(1) 
{ 
memset(buf, 0x00, 1024+1); 
if(fgets((char *)buf, 1024, fp1) == NULL) 
{ 
if(strlen(buf) == 0) 
{ 
if(ferror(fp1) != 0) 
   perror("file1 open!");
break; 
} 
} 
if(fputs((char *)buf, fp2) == EOF) 
  perror("file2 open!");
}
 fclose(fp2);
 fclose(fp1); 
return; 
}

void SplitKeyVal(char buff[],char buf1[], char buf2[])
{
int n,length,i=0;
char ch= '=';
 char tmp[128];
 char *tmp1;
 n=my_strchr(buff,tmp,ch);
  strcpy(buf1,tmp);
  tmp1=strchr(buff,'=')+1;
 while(*tmp1!=NULL&&*tmp1!='\n')
  	 buf2[i++]=*tmp1++;
 buf2[i]='\0';
  return;
}
int ConfigGetKey(char *CFG_file, void *section, void *key, char buf[])
{ 
FILE *fp; 
char buf1[MAX_CFG_BUF + 1], buf2[MAX_CFG_BUF + 1]; 
char val_ptr[MAX_CFG_BUF+1]; 
char key_ptr[MAX_CFG_BUF+1];
int line_no, n, ret; 

line_no = 0; 
CFG_section_line_no = 0; 
CFG_key_line_no = 0; 
CFG_key_lines = 0; 
buf1[0]='\0';
buf2[0]='\0';
key_ptr[0]='\0';
val_ptr[0]='\0';
if((fp = fopen((char *)CFG_file, "r")) == NULL)
{
 perror("file3 open!");
return CFG_ERR_OPEN_FILE;
}
while(1) /* find group section */ 
{ 
ret = CFG_ERR_READ_FILE; 
n = FGetLine(fp, buf1, MAX_CFG_BUF); 
if(n < -1) 
   { fclose(fp);
     return ret;
}
ret = CFG_SECTION_NOT_FOUND; 
if(n < 0) //goto r_cfg_end; /* 文件尾,未发现 */ 
     {
     fclose(fp);
     return ret;
}
line_no++; 
n=strTrimlr(buf1);
if(n == 0 || buf1[0] == Nsymbol) continue; /* 空行 或 注释行 */ 
ret = CFG_ERR_FILE_FORMAT; 
if(n > 2 && ((buf1[0] == Lsymbol && buf1[n-1] != Rsymbol))) 
     {
     fclose(fp);
     return ret;
}
if(buf1[0] == Lsymbol) 
{ 
buf1[n-1] = 0x00; 
//break; /* 找到项section */ 
} 
if(strcmp(buf1+1, section) == 0) 
break; /* 找到项section */ 
} 
CFG_section_line_no = line_no; 

while(1) /* 搜找key */ 
{ 
ret = CFG_ERR_READ_FILE; 
n = FGetLine(fp, buf1, MAX_CFG_BUF); 
if(n < -1) //goto r_cfg_end; 
      {
     fclose(fp);
     return ret;
}
ret = CFG_KEY_NOT_FOUND; 
if(n < 0) //goto r_cfg_end; /* 文件尾,未发现key */ 
     {
     fclose(fp);
     return ret;
}
line_no++; 
CFG_key_line_no = line_no; 
CFG_key_lines = 1; 
//n = strlen(strtriml(strtrimr(buf1))); 
n=strTrimlr(buf1);
if(n == 0 || buf1[0] == Nsymbol) continue; /* 空行 或 注释行 */ 
ret = CFG_KEY_NOT_FOUND; 
if(buf1[0] == Lsymbol)   
      {
    fclose(fp);
    return ret;
	}

SplitKeyVal(buf1,key_ptr, val_ptr);
strTrimlr(key_ptr);
if(strcmp(key_ptr, key) != 0) 
continue; /* 和key值不匹配 */ 
strcpy(buf, val_ptr); 
break; 
}
fclose(fp); 
ret = CFG_OK; 
return ret; 
} 
int ConfigSetKey(char *CFG_file, void *section, void*key, void *buf)
{ 
FILE *fp1, *fp2; 
char buf1[MAX_CFG_BUF + 1]; 
int line_no, line_no1, n, ret, ret2; 
char *tmpfname; 
ret = ConfigGetKey(CFG_file, section, key, buf1); 
if(ret <= CFG_ERR && ret != CFG_ERR_OPEN_FILE) return ret; 
if(ret == CFG_ERR_OPEN_FILE || ret == CFG_SECTION_NOT_FOUND) 
{ 

if((fp1 = fopen((char *)CFG_file, "a")) == NULL) 

return CFG_ERR_CREATE_FILE; 

if(fprintf(fp1, "%c%s%c\n", Lsymbol, section, Rsymbol) == EOF) 
{ 
fclose(fp1); 
return CFG_ERR_WRITE_FILE; 
} 
if(fprintf(fp1, "%s=%s\n", key, buf) == EOF) 
{ 
fclose(fp1); 
return CFG_ERR_WRITE_FILE; 
} 
fclose(fp1); 
return CFG_OK; 
} 
//ret2 = CFG_ERR_OPEN_FILE; 
if((fp2=fopen("tempconf.ini","wb"))==NULL)
	perror("ini-file4 open!");
if((fp1 = fopen((char *)CFG_file, "rb")) == NULL) //goto w_cfg_end; 
  perror("file5 open!");
if(ret == CFG_KEY_NOT_FOUND) {
line_no1 = CFG_section_line_no; 
}
else /* ret = CFG_OK */ {
line_no1 = CFG_key_line_no - 1; 
}

for(line_no = 0; line_no < line_no1; line_no++) 
{ 
ret2 = CFG_ERR_READ_FILE; 
n = FGetLine(fp1, buf1, MAX_CFG_BUF); 
if(n < 0)
{
fclose(fp1);
fclose(fp2);
return ret2;
}
fprintf(fp2,"%s\n",buf1);
} 
if(ret != CFG_KEY_NOT_FOUND) {
	
for( ; line_no < line_no1+CFG_key_lines; line_no++) 
{ 
ret2 = CFG_ERR_READ_FILE; 
n = FGetLine(fp1, buf1, MAX_CFG_BUF); 
if(n < 0) //goto w_cfg_end; 
{
 fclose(fp1);
 fclose(fp2);
 return ret2;
}
} 
}
fprintf(fp2,"%s=%s\n",key,buf);
while(1) 
{ 
ret2 = CFG_ERR_READ_FILE; 
n = FGetLine(fp1, buf1, MAX_CFG_BUF); 
if(n < -1) //goto w_cfg_end; 
{
 fclose(fp1);
 fclose(fp2);
 return ret2;
}
if(n < 0) break; 
ret2 = CFG_ERR_WRITE_FILE; 
if(fprintf(fp2, "%s\n", buf1) == EOF) //goto w_cfg_end; 
 perror("file6 open!");
} 
fclose(fp2);
 fclose(fp1); 
ret2 = CFG_OK; 
FileCopy("tempconf.ini", CFG_file);
remove("tempconf.ini"); 
return ret2; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -