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

📄 manual.c

📁 unix下进行电报传输的源码。采用信号灯技术避免文件冲突等等
💻 C
字号:
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <time.h>
#include <math.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 yymmdd(char * ymd);
void delsp(char *p0);
int  statusx,semid;
main()
{ int num=0,in,i,sl;
  char *datestr="       ";
  char fn1[50];
  char fix[1024],fix0[128];
  FILE *fp1,*fp2,*fp3;
  semid=semset();
  printf("Semid is %d\n",semid);
  for(i=0;i<50;i++)fn1[i]=0;
  for(i=0;i<1024;i++)fix[i]=0;
  yymmdd(datestr);
  sprintf(fn1,"%s%s%s","/nfcnet/tele/ma",datestr,".tel");
  if((fp3=fopen("/nfcnet/sysd/lastman.dat","r"))!=NULL)
  { fscanf(fp3,"%d",&num); fclose(fp3);}
  fp2=fopen("/nfcnet/temp/ma_sort0.tmp","a+");
  fp1=fopen(fn1,"a+");
  for(;;)
  { num++;
    if(num==1000)num=1;
    printf("\n\nEnter 'DEL' to delete a telegram of typed .\n");
    printf("Enter 'END' to end input of a telegram .\n");
    printf("Enter 'EXIT' to exit from manual .\n");
    printf("Profix and flow NO. %s%03d\n",P_MANFIX1,num);
    for(i=0; i<=20; i++)printf("-");
    printf("\n");
    for(;;)
    { gets(fix0);
      sl=strlen(fix0);
      for(i=0; i<sl; i++)
      { in=fix0[i]; fix0[i]=(char)toupper(in);}
      delsp(&fix0[0]);
      if(strstr(fix0,"DEL")!=0) break;
      if(strstr(fix0,"END")!=0) break;
      if(strstr(fix0,"EXIT")!=0) break;
      strcat(fix," ");
      strcat(fix,fix0);
    }
    if(strstr(fix0,"EXIT")!=0) break;
    if(strstr(fix0,"END")!=0)
    { delsp(&fix[0]);
      fprintf(fp1,"%s%03d %s\n",P_MANFIX1,num,fix);
      fprintf(fp2,"%s%03d %s\n",P_MANFIX1,num,fix);
      if((fp3=fopen("/nfcnet/sysd/lastman.dat","w+"))!=NULL)
      { fprintf(fp3,"%d",num); fclose(fp3);}
      for(i=0;i<1024;i++)fix[i]=0;
    }
    else
    { for(i=0;i<1024;i++)fix[i]=0; num--; if(num==0)num=999; }
  }
  fclose(fp1);
  fclose(fp2);
  statusx=semopena(semid,P_MA_SORT);
  fp1=fopen("/nfcnet/temp/ma_sort0.tmp","rb+");
  fp2=fopen("/nfcnet/temp/ma_sort1.tmp","ab+");
  for(;;){in=fgetc(fp1); if(in==EOF)break; fputc(in,fp2);}
  fp1=freopen("/nfcnet/temp/ma_sort0.tmp","w+",fp1);
  fclose(fp1);
  fclose(fp2);
  statusx=semclose(semid,P_MA_SORT);
}
void yymmdd(char *ymd)
{
  time_t idymd;
  struct tm cdymd;
  struct tm *cdymdp;
  cdymdp=&cdymd;
  time(&idymd);
  cdymdp=localtime(&idymd);
  cdymd=*cdymdp;
  sprintf(ymd,"%02d%02d%02d",cdymd.tm_year,cdymd.tm_mon+1,cdymd.tm_mday);
}
void delsp(char *p0)
{ char *p1; int sl1,i;
  for(;;)
  { p1=strstr(p0,"  ");
    if(p1==0)break;
    sl1=strlen(p1);
    for(i=0; i<=sl1; i++)*(p1+i)=*(p1+i+1);
  }
  if(*p0==' ')
    { sl1=strlen(p0);
      for(i=0; i<=sl1; i++)*(p0+i)=*(p0+i+1);}
  sl1=strlen(p0);
  if(*(p0+sl1-1)==' ')*(p0+sl1-1)=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 + -