📄 public.c
字号:
/* the result is lcza_process get "CMA","CMB" */
/* Remarks */
/* */
/* Modification History: */
/********************************************************************/
int get_para_array( int* api_error,
FILE* ah_file, \
char* acz_paratype, \
char* acz_para, \
char acz_value[][LEN] \
)
{
char lcz_para_file[LEN];
char lcza_para[LEN][LEN];
int li_count;
int i;
/*Get local device parameter*/
/*parameter values*/
memset(lcza_para,0x00,sizeof(lcza_para));
/*parameter type,name*/
/*Call the function,get local device*/
read_para(api_error, /*type of ERROR*/
&li_count, /*number of the parameters*/
lcza_para, /*the result arry*/
ah_file, /*parameter file*/
acz_paratype, /*type of the parameter*/
acz_para /*name of the parameter*/
);
if ( 0 == *api_error )
{
for ( i = 0; i < li_count; i++)
strcpy(acz_value[i],lcza_para[i]);
}
return ( li_count );
}
/********************************************************************/
/* */
/* Function Name : get_format_time */
/* Description : get the current time string as format */
/* Progrmmer : yiwu */
/* Create Date : 1 Aug 2002 */
/* Last Update : */
/* Programming Language : C */
/* compiler : cc */
/* Memory Model : small */
/* */
/* Assumptions : The parameters_file has placed into a given path. */
/* */
/* I/O specification */
/* Input Parameter : acz_time_buf : addr of string */
/* size : length of the string */
/* Ouput Parameter : acz_time_buf : value of current time */
/* Library : NO */
/* Remarks */
/* */
/* Modification History: */
/********************************************************************/
void get_format_time( char* acz_time_buf, size_t size )
{
time_t t;
time( &t );
strftime( acz_time_buf, \
size, \
"%Y-%m-%d %T", \
localtime( &t )
);
return;
}
/*******************************************************************
* 函数名: OpenSemSet
* 作者: 章旭
* 编写日期:2002.8
* 函数功能:初始化一个信号量的集合
* 输入: key:信号量的KEY值,
* sem_count:信号量个数
* 输出: 无
* 返回值: 返回信号量id
* 修改记录(如果有)
* 注意事项:
********************************************************************/
int OpenSemSet(key_t key,int sem_count)
{ /**/
int li_sid;
if (!sem_count)
{
return(-1);
}
if ((li_sid = semget(key,sem_count,IPC_CREAT|0660)) == -1)
{
printf("初始化信号量失败!\n");
exit(-1);
}
else
{
return(li_sid);
}
}
/*******************************************************************
* 函数名: SetSemVal
* 作者: 章旭
* 编写日期:2002.8
* 函数功能:给指定的信号量设值
* 输入: ai_sid:信号量标识,ai_sem_index:信号量索引号,ai_value:信号量的值
* 输出: 无
* 返回值:
* 修改记录(如果有)
* 注意事项:
********************************************************************/
int SetSemVal(int ai_sid,int ai_sem_index,int ai_value)
{
union semun semopts;
semopts.val = ai_value;
return(semctl(ai_sid,ai_sem_index,SETVAL,semopts));
}
/*******************************************************************
* 函数名: GetSemVal
* 作者: 章旭
* 编写日期:2002.8
* 函数功能:获得信号量的值
* 输入: ai_sid:信号量标识,ai_sem_index:信号量索引号
* 输出: 无
* 返回值: 返回指定信号量的值
* 修改记录(如果有)
* 注意事项:
*******************************************************************/
int GetSemVal(int ai_sid,int ai_sem_index)
{
return(semctl(ai_sid,ai_sem_index,GETVAL,0));
}
/********************************************************************
* 函数名 : f_lock
* 作者 : genius.xuyong
* 编写日期 : 20 Sep 2002
* 函数功能 : 文件锁
* 输入 :
* 输出 : 无
* 返回值 : 0 : 成功
* 修改记录 :
* 注意事项 :
********************************************************************/
int f_lock(char* acz_lckfile)
{
int li_fd = -1;
struct flock lck;
int li_value = -1;
char lcz_file[LEN];
lck.l_start = 0;
lck.l_len = 0;
lck.l_type = F_WRLCK;
lck.l_whence = SEEK_SET;
li_fd = open((char*)acz_lckfile,O_RDWR);
if (-1 == li_fd)
{
printf("open lock_file failed!\n");
return ( -1 );
}
/** 加锁 **/
do
{
} while ( -1 == fcntl(li_fd,F_SETLKW,&lck));
close(li_fd);
return ( 0 );
}
/********************************************************************
* 函数名 : f_unlock
* 作者 : genius.xuyong
* 编写日期 : 20 Sep 2002
* 函数功能 : 解除文件锁
* 输入 :
* 输出 : 无
* 返回值 : 0 : 成功
* 修改记录 :
* 注意事项 :
********************************************************************/
int f_unlock(char* acz_lckfile)
{
int li_fd = -1;
struct flock lck;
int li_value = -1;
char lcz_file[LEN];
lck.l_start = 0;
lck.l_len = 0;
lck.l_type = F_UNLCK;
lck.l_whence = SEEK_SET;
li_fd = open((char*)acz_lckfile,O_RDONLY);
if (-1 == li_fd)
{
printf("open file.lck failed!\n");
return ( -1 );
}
/** 加锁 **/
fcntl(li_fd,F_SETLKW,&lck);
close(li_fd);
return ( 0 );
}
/********************************************************************
* 函数名 : write_unusuality
* 作者 : genius.xuyong
* 编写日期 : 15 Aug 2002
* 函数功能 : 将未写入消息队列或发送socket未成功的信息写入异常文件
* 输入 : acz_string : 信息内容
ai_len : 信息长度
* 输出 : 无
* 返回值 : 0 : 写入成功,
-1 : 未写入
* 修改记录 :
* 注意事项 :
********************************************************************/
int write_unusuality(char* acz_unusualfile,
char* acz_lckfile,
char* acz_string,
int ai_len)
{
FILE* pFp;
char lcz_buf[LEN];
char lcz_file[LEN];
FILE* lh_file;
/** 阻塞模式设置文件锁**/
f_lock(acz_lckfile);
/** 指定文件打开方式为读操作**/
if ( NULL != (pFp = fopen((char*)acz_unusualfile,"r") ) )
{
memset(lcz_buf,0x00,sizeof(lcz_buf));
while( NULL != fgets(lcz_buf,sizeof(lcz_buf),pFp ) )
{
if ( memcmp(lcz_buf,acz_string ,ai_len ) )
{
continue;
}
else
{
printf("the same record is exist\n");
fflush( NULL );
fclose(pFp);
/**打开文件锁**/
f_unlock(acz_lckfile);
return ( -1 );
}
}
}
/**关闭该文件**/
fclose(pFp);
/** 追加操作方式打开文件,写入该串**/
pFp=fopen((char*)acz_unusualfile,"a+");
fwrite( acz_string, ai_len, 1, pFp );
fwrite( "\n", 1, 1, pFp );
fclose(pFp);
f_unlock(acz_lckfile);
return (0);
}
/********************************************************************
* 函数名 : error_deal
* 作者 : genius.xuyong
* 编写日期 : 11 Nov 2002
* 函数功能 : 处理error_type
* 输入 : ai_error_type : 错误代码
* 输出 : 无
* 修改记录 :
* 注意事项 :
********************************************************************/
void error_deal(int ai_error_type)
{
FILE* lh_file;
lh_file = fopen("Error_deal_file","w");
switch (ai_error_type)
{
case -6000:
{
fwrite("error_type:-6000:消息队列未建立\n",1,31,lh_file);
break;
}
case -6100:
{
fwrite("error_type:-6100:cm_ss无参数文件\n",1,32,lh_file);
break;
}
case -6101:
{
fwrite("error_type:-6101:cm_ss设备号错误\n",1,32,lh_file);
break;
}
case -6102:
{
fwrite("error_type:-6102:cm_ss服务器地址错误\n",1,36,lh_file);
break;
}
case -6103:
{
fwrite("error_type:-6103:cm_ss服务器端口错误\n",1,36,lh_file);
break;
}
case -6104:
{
fwrite("error_type:-6104:cm_ss测试串时间间隔错误\n",1,40,lh_file);
break;
}
case -6105:
{
fwrite("error_type:-6105:cm_ss异常文件名错误\n",1,36,lh_file);
break;
}
case -6106:
{
fwrite("error_type:-6105:cm_ss锁文件名错误\n",1,34,lh_file);
break;
}
case -6200:
{
fwrite("error_type:-6200:cm_fm无参数文件\n",1,32,lh_file);
break;
}
case -6201:
{
fwrite("error_type:-6201:cm_fm设备号错误\n",1,32,lh_file);
break;
}
case -6202:
{
fwrite("error_type:-6202:cm_fm采集端口错误\n",1,34,lh_file);
break;
}
case -6203:
{
fwrite("error_type:-6203:cm_fm进程错误\n",1,30,lh_file);
break;
}
case -6204:
{
fwrite("error_type:-6204:cm_fm时间间隔错误\n",1,34,lh_file);
break;
}
case -6205:
{
fwrite("error_type:-6205:cm_fm异常文件名错误\n",1,36,lh_file);
break;
}
case -6206:
{
fwrite("error_type:-6205:cm_fm锁文件名错误\n",1,34,lh_file);
break;
}
case -6300:
{
fwrite("error_type:-6300:tcp通讯错误\n",1,31,lh_file);
break;
}
}
fclose(lh_file);
return ;
}
/* huangliping remark*/
/*
* 函数介绍:记录程序处理过程的日志
* 输入参数:str
* 处理 :将str记录到系统日志中(runningstate.log)
* 输出参数:无
* 返回值 :无
*/
void WriteLogFile(char * str)
{
FILE * fp;
fp=OpenFile("../Log/log.dat",fp,"a");
fputs(str,fp);
CloseFile(fp);
}
void CloseFile(FILE * fp)
{
fclose(fp);
}
FILE * OpenFile(char * file_name,FILE * fp,char * opentype)
{
FILE * fpt;
int quit_flag=0;
char log_str[100];
fp=fopen(file_name,opentype);
if(strcmp(file_name,"../Log/log.dat")!=0)
{
fpt=fopen("../Log/log.dat","a");
}
else
{
fpt=fp;
}
if(fp==NULL)
{
printf("Can not Open file stand %s\n",file_name);
/*准备写入日志*/
sprintf(log_str,"Can not Open file %s\n",file_name);
fputs(log_str,fpt);
quit_flag=1;
}
if(quit_flag==1)
{
CloseFile(fpt);
exit(5);
}
else
{
return fp;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -