📄 pre_netw.c
字号:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "nfcnet.h"
int semset(void);
int semopena(int semset_semid,int semset_semno);
int semopenr(int semset_semid,int semset_semno);
int semclose(int semset_semid,int semset_semno);
void get_dt_rbmk(void);
void get_dt2(void);
void out_dt_rbmk(void);
void propro(char *buf1, char *buf2);
int fline(FILE *fp,char *buf1);
int proc1(char *buf1);
void proc2(char *buf1);
int proc3(char *ls);
void nwloginout(int mk);
int iy1,im1,id1,iy2,im2,id2;
FILE *fpmk, *fpi, *fpo1, *fpo2;
long int rb_mk;
/*
This is the main that proprocess telegrams
that is received from telegram office .
*/
int statusx,semid;
void main()
{ /* The file name is for TEyymmdd.TEL, PR_SORT.TMP,
and PRyymmdd.TEL . */
char fni[256], fno1[50];
char buf1d[1024],bufxd[3072];
char *buf1, *bufx;
int i,j,k,ijk;
semid=semset();
printf("Semid is %d\n",semid);
for(i=0;i<1024; i++)buf1d[i]=0;
for(i=0;i<3072;i++)bufxd[i]=0;
buf1=&buf1d[0];
bufx=&bufxd[0];
get_dt_rbmk();
ijk=0;
nwloginout(0); sleep(30);
for(;;)
{ for(;;)
{ sprintf(fni,"/netware/%s.nws/%s.nwv%s/tele%02d%02d.tel",
P_SERVER,P_VOLUME,P_DIRECTORY,im1,id1);
sprintf(fno1,"/nfcnet/tele/pr%02d%02d%02d.tel",iy1,im1,id1);
if((fpi=fopen(fni,"r"))!=NULL){break;}
fpi=fopen(fni,"a+");
fclose(fpi);
}
statusx=semopena(semid,P_PR_SORT);
fpo1=fopen(fno1,"a+");
fpo2=fopen("/nfcnet/temp/pr_sort0.tmp","a+");
fseek(fpi,rb_mk,SEEK_SET);
propro(buf1,bufx);
fclose(fpi);
fclose(fpo1);
fclose(fpo2);
statusx=semclose(semid,P_PR_SORT);
get_dt2();
if((iy1!=iy2)||(im1!=im2)||(id1!=id2))
{ iy1=iy2; im1=im2; id1=id2; rb_mk=0;}
out_dt_rbmk();
printf("PRE_PROC Waiting for (%d) mins(%d) .\n",P_SLEEPTIME,ijk);
ijk++;
if(ijk==1000)ijk=0;
sleep(P_SLEEPTIME*60);
}
/*nwloginout(1);*/
}
/*
To login or logout from server .
*/
void nwloginout(int mk)
/*
mk=0 means login
mk=1 means logout
*/
{ char logcmd[100];
if(mk==0)
{ sprintf(logcmd,"/usr/bin/nwlogin %s/%s < /etc/rc3.d/serverpass%c",
P_SERVER,P_USERNAME,0);
system(logcmd);
}
if(mk==1)
{ sprintf(logcmd,"/usr/bin/nwlogout %s%c",P_SERVER,0);
system(logcmd);
}
}
/*
To get the date and rb_mk .
*/
void get_dt_rbmk(void)
{ time_t idymd;
struct tm cdymd;
struct tm *cdymdp;
cdymdp=&cdymd;
if((fpmk=fopen("/nfcnet/sysd/pre_proc.idd","r"))!=NULL)
{ fscanf(fpmk,"%d%d%d%ld",&iy1,&im1,&id1,&rb_mk);
fclose(fpmk); }
else
{ time(&idymd);
cdymdp=localtime(&idymd);
cdymd=*cdymdp;
iy1=cdymd.tm_year;
im1=cdymd.tm_mon+1;
id1=cdymd.tm_mday;
rb_mk=0;
}
}
/*
To get the date .
*/
void get_dt2(void)
{ time_t idymd;
struct tm cdymd;
struct tm *cdymdp;
cdymdp=&cdymd;
time(&idymd);
cdymdp=localtime(&idymd);
cdymd=*cdymdp;
iy2=cdymd.tm_year;
im2=cdymd.tm_mon+1;
id2=cdymd.tm_mday;
}
/*
To write the date and rb-mk into file PRE_PROC.IDD .
*/
void out_dt_rbmk(void)
{ if((fpmk=fopen("/nfcnet/sysd/pre_proc.idd","w+"))!=NULL)
{ fprintf(fpmk,"%d %d %d %ld\n",iy1,im1,id1,rb_mk);
fclose(fpmk);}
}
/*
To proprocess the telegram .
*/
void propro(char *buf1, char *bufx)
{ int imk,imk1,imk2,jkx,len,i;
char *zc3="ZCZC";
char *zc2="ZCZC RERN";
char *zc1="ZCZC RETV";
char *nnn="NNN";
char *jks,*jkl,*ls=" ";
char sp[2]=" ";
jkx=-1;
do
{ imk=fline(fpi,buf1);
imk1=proc1(buf1);
if(imk1!=0)
{ jks=0;
proc2(buf1);
if(jkx==-1)
{ jks=strstr(buf1,zc1); if(jks!=0) {jks=jks+10;jkx=0;}}
if(jkx==-1)
{ jks=strstr(buf1,zc2); if(jks!=0) {jks=jks+10;jkx=0;}}
if(jkx==-1)
{ jks=strstr(buf1,zc3); if(jks!=0) {jks=jks+ 5;jkx=0;}}
if((jkx==0)&&(jks!=0))
{ jkl=strstr(jks,sp);
if(jkl!=0)
{ len=jkl-jks;
if((len==6)||(len==7))
{ for(i=0;i<9;i++)*(ls+i)=0;
strncpy(ls,jks,len);
imk2=proc3(ls);
if(imk2==-1) {jkx=-1;}
else
{ jkx=1;
strncpy(bufx,jks,len+1);
*(bufx+len+1)=0;
}
}
else
{jkx=-1;}
}
else
{ jkx=-1;}
}
if((jks==0)&&(jkx==1))
{ jks=strstr(buf1,P_TELEADDR); if(jks!=0){jkx=2;jks=0;}}
if((jks==0)&&(jkx==2))
{ jks=strstr(buf1,P_POSTOFFICE);if(jks!=0)jkx=3;}
if((jks==0)&&(jkx==3))
{ jks=strstr(buf1,nnn);
if(jks==0) { strcat(bufx,buf1);}
else
{ rb_mk=(long)ftell(fpi);
fprintf(fpo1,"%s\n",bufx);
fprintf(fpo2,"%s\n",bufx);
for(i=0;i<1024;i++)*(bufx+i)=0;
jkx=-1;
}
}
}
for(i=0;i<128;i++)*(buf1+i)=0;
} while((imk!=EOF));
}
/*
To read a line telegram .
*/
int fline(FILE *fp,char *buf1)
{ int ch; int icnt;
char che='\n';
char *px;
px=buf1;
icnt=0;
do
{ ch=fgetc(fp);
*px=(char)ch;
px++; icnt++;
}while((ch!=che)&&(ch!=EOF)&&(icnt<128));
*px=0;
if(ch==EOF) { return EOF;}
else { return strlen(buf1);}
}
/*
To delete the more one space .
*/
int proc1(char *buf1)
{ char *i,*jks;
char * space=" ";
int len;
for(i=buf1;*i!=0;i++)if(*i<' ')*i=' ';
for(i=buf1;*i!=0;i++)if(*i>126)*i=' ';
do
{ jks=strstr(buf1,space);
if(jks!=0)for(i=jks;*i!=0;i++)*i=*(i+1);
}while(jks!=0);
len=strlen(buf1);
jks=buf1+len-1;
if(*(jks)!=' ') {jks=jks+1; *jks=' ';}
if(*buf1==' ') {for(i=buf1;*i!=0;i++)*i=*(i+1);}
len=strlen(buf1);
return len;
}
/*
To convert lower to upper .
*/
void proc2(char *buf1)
{ int i,len;
len=strlen(buf1);
for(i=0; i<=len; i++)buf1[i]=(char)toupper(buf1[i]);
}
/*
To analysis profix and flow NO. .
*/
int proc3(char *ls)
{ int len,k,i;
len=strlen(ls);
if(len==6) { k=2;} else { k=3;}
for (i=0;i<k ;i++)if((isalpha((int)ls[i]))==0)return -1;
for (i=k;i<len-1;i++)if((isdigit((int)ls[i]))==0)return -1;
return 0;
}
int semset(void)
{ int semset_semid;
key_t semset_key= P_SEMSKEY;
int semset_nsems= P_SEMNUMB;
int semset_semflg= IPC_CREAT|P_SEMACCESS;
semset_semid=semget(semset_key,semset_nsems,semset_semflg);
return semset_semid;
}
int semopena(int semset_semid,int semset_semno)
{ extern int errno; int status;
int semset_semflg=P_SEMACCESS;
struct sembuf *semset_sops;
struct sembuf semset_sopsbuf;
size_t semset_nsops=1;
semset_sops=&semset_sopsbuf;
semset_sopsbuf.sem_num=semset_semno;
semset_sopsbuf.sem_op=-1;
semset_sopsbuf.sem_flg=semset_semflg;
status=semop(semset_semid,semset_sops,semset_nsops);
if(status==-1) {return -1;} else {return 0;}
}
int semopenr(int semset_semid,int semset_semno)
{ extern int errno; int status;
int semset_semflg=P_SEMACCESS|IPC_NOWAIT;
struct sembuf *semset_sops;
struct sembuf semset_sopsbuf;
size_t semset_nsops=1;
semset_sops=&semset_sopsbuf;
semset_sopsbuf.sem_num=semset_semno;
semset_sopsbuf.sem_op=-1;
semset_sopsbuf.sem_flg=semset_semflg;
status=semop(semset_semid,semset_sops,semset_nsops);
if(status==-1) {return -1;} else {return 0;}
}
int semclose(int semset_semid, int semset_semno)
{ extern int errno; int status;
int semset_semflg=P_SEMACCESS|IPC_NOWAIT;
struct sembuf *semset_sops;
struct sembuf semset_sopsbuf;
size_t semset_nsops=1;
semset_sops=&semset_sopsbuf;
semset_sopsbuf.sem_num=semset_semno;
semset_sopsbuf.sem_op=1;
semset_sopsbuf.sem_flg=semset_semflg;
status=semop(semset_semid,semset_sops,semset_nsops);
if(status==-1) {return -1;} else {return 0;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -