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

📄 ns_input.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);
int fline(FILE *fp,char *buf1);
int proc1(char *buf1);
int  statusx,semid;
main()
{ int num=0,in,i,sl,imk,imk1;
  char *datestr="       ";
  char fn1[50]; char bufx[3072];
  FILE *fp1,*fp2,*fp3;
  semid=semset();
  printf("Semid is %d\n",semid);
  for(i=0;i<50;i++)fn1[i]=0;
  for(;;)
  {
    statusx=semopena(semid,P_MA_SORT);
    if((fp1=fopen("/nfcnet/ddbf/ns_input.tmp","rb+"))!=NULL)
    {
      fp2=fopen("/nfcnet/temp/ma_sort1.tmp","ab+");
      yymmdd(datestr);
      sprintf(fn1,"%s%s%s","/nfcnet/tele/ns",datestr,".tel");
      fp3=fopen(fn1,"a+");
      for(;;)
      {
        imk=fline(fp1,bufx);
        imk1=proc1(bufx);
        if(imk1!=0){ fprintf(fp2,"%s\n",bufx); fprintf(fp3,"%s\n",bufx); }
        if(imk==EOF)break;
      }
    fp1=freopen("/nfcnet/ddbf/ns_input.tmp","w+",fp1);
    fclose(fp1);
    fclose(fp2);
    fclose(fp3);
    }
    else
    {
      fp1=fopen("/nfcnet/ddbf/ns_input.tmp","w+");
      fclose(fp1);
    }
    statusx=semclose(semid,P_MA_SORT);
    printf("I am sleeping for (%d) Mins .\n",P_SLEEPTIME);
    sleep(P_SLEEPTIME*60);
  }
}
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);
}
/*
  To read a line telegram .
*/
int fline(FILE *fp,char *buf1)
{ int ch;
  char che='\n';
  char *px;
  px=buf1;
  do
  { ch=fgetc(fp);
    *px=(char)ch; px++;
  }while((ch!=che)&&(ch!=EOF));
  *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;
}
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 + -