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

📄 npre_pro.c

📁 unix下进行电报传输的源码。采用信号灯技术避免文件冲突等等
💻 C
字号:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <time.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.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);
int fline(FILE *fp,char *buf);
void yymmdd(void);
void yymmdds(void);
void nprepro(FILE *fp, int iobj);
int iyy,imm,idd,ihh,imn,iss;
char *datestr="       ";
char tele[4096], *pfnew="        ", *prfx="   ";
char *prfxrcd="        ";
char *p0, *p1, *p2, *p3;
FILE *fp,*fp1,*fp2,*fp3;
int statusx,semid;
void main()
{ int i,in,ijk; char fn[50]; char fn1[50];
  semid=semset();
  printf("Semid is %d\n",semid);
  p0=&tele[0];
  ijk=0;
  for(;;)
  { yymmdds();
    statusx=semopenr(semid,P_R0);
    printf("P_SENDOBJ=%d\n",P_SENDOBJ);
    if(statusx==0)
    { for(i=0; i<=P_SENDOBJ; i++)
      { sprintf(fn,"/nfcnet/netr/r%03d1.dat",i);
        sprintf(fn1,"/nfcnet/netr/r%03d2.dat",i);
        if((fp=fopen(fn,"r+"))==NULL)fp=fopen(fn,"a+");
        fp1=fopen(fn1,"a+");
        while(1)
        { if((fgets(tele,4096,fp))==NULL)break;
          fprintf(fp1,"%s",tele);
        }
        fclose(fp1);
        fp=freopen(fn,"w+",fp);
        fclose(fp);
      }
      statusx=semclose(semid,P_R0);
      for(i=0; i<=P_SENDOBJ; i++)
      { sprintf(fn,"/nfcnet/netr/r%03d2.dat",i);
        printf("%s\n",fn);
        if((fp=fopen(fn,"r+"))==NULL)fp=fopen(fn,"a+");
        printf("NPRE_PRO open file /nfcnet/netr/r%03d2.dat\n",i);
        nprepro(fp,i);
        fp=freopen(fn,"w+",fp);
        fclose(fp);
      }
    }
    if(statusx==-1) printf("NPRE_PRO semopenr is error !\n");
    printf("NPRE_PRO Waiting for (%d) mins(%d) .\n",P_SLEEPTIME,ijk);
    ijk++;
    if(ijk==1000)ijk=0;
    sleep(P_SLEEPTIME*60);
  }
}
void yymmdd(void)
{ time_t idymd;
  struct tm cdymd;
  struct tm *cdymdp;
  cdymdp=&cdymd;
  time(&idymd);
  cdymdp=localtime(&idymd);
  cdymd=*cdymdp;
  iyy=cdymd.tm_year;
  imm=cdymd.tm_mon+1;
  idd=cdymd.tm_mday;
  ihh=cdymd.tm_hour;
  imn=cdymd.tm_min;
  iss=cdymd.tm_sec;
}
void yymmdds(void)
{
  time_t idymd;
  struct tm cdymd;
  struct tm *cdymdp;
  cdymdp=&cdymd;
  time(&idymd);
  cdymdp=localtime(&idymd);
  cdymd=*cdymdp;
  sprintf(datestr,"%02d%02d%02d%c",cdymd.tm_year,cdymd.tm_mon+1,cdymd.tm_mday,0);
}
void nprepro(FILE *fp, int iobj)
{ char fn3[50],fn4[50],fn5[50];
  int imk,i,openmk;
  statusx=semopena(semid,P_NP_SORT);
  sprintf(fn3,"/nfcnet/tele/np%s.tel",datestr);
  fp2=fopen(fn3,"a+");
  fp1=fopen("/nfcnet/temp/np_sort0.tmp","a+");
  openmk=0;
  for(;;)
  { imk=fline(fp,p0);
    if(imk==EOF)break;
    p1=strstr(p0," ");
    if(p1==0)break;p1++;
    p2=strstr(p1," ");
    if(p2==0)break;p2++;
    strncpy(pfnew,p0,7); *(pfnew+7)=0;
    strncpy(prfxrcd,p0,6); *(prfxrcd+6)=0;
    strncpy(prfx,p0,2); *(prfx+2)=0;
    fprintf(fp1,"%s%s\n",pfnew,p2);
    fprintf(fp2,"%s\n",p0);
    if(openmk==0)
    { sprintf(fn4,"/nfcnet/tele/%s%s.tel",prfx,datestr);
      for(;;){if((fp3=fopen(fn4,"a+"))!=NULL)break;}
      openmk=1;
    }
    fprintf(fp3,"%s\n",p0);
  }
  if(openmk==1)
  { fclose(fp3);
    sprintf(fn5,"/nfcnet/netr/r%03dlast.dat",iobj);
    fp3=fopen(fn5,"w+");
    yymmdd();
    fprintf(fp3,"%02d %02d %02d %02d:%02d",iyy,imm,idd,ihh,imn);
    for(i=0;i<6;i++)
    {
      fprintf(fp3,"%c",*(prfxrcd+i));
    }
    fclose(fp3);
  }
  fclose(fp1);
  fclose(fp2);
  statusx=semclose(semid,P_NP_SORT);
}
int fline(FILE *fp, char *buf)
{ int ich;
  char *px;
  px=buf;
  for(;;)
  { if((ich=fgetc(fp))==EOF)return EOF;
    if(ich>=' '){*px=(char)ich;px++;}
    if(ich=='\n'){*px=0;break;}
  }
  return 1;
}
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 + -