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

📄 snd_auto.c

📁 unix下进行电报传输的源码。采用信号灯技术避免文件冲突等等
💻 C
字号:
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
#include <fcntl.h>
#include <termio.h>
#include <unistd.h>
#include <string.h>
#include "nfcnet.h"
int iy1,im1,id1,ih1,imn;
int portinit(int devid);
void strtoup(char *strp);
void strtolo(char *strp);
void yymmdd(void);
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);
main()
{ int Retry,i, devidd,len,len1,ijk,statusx,semid;
  char buf[1024]={0},buf1[128]={0},c;
  Retry=0;
  for(;;)
  { if((devidd=open(P_DEVNAME,O_RDWR|O_NONBLOCK))==-1)
    { printf("SND_TELE Open (%s) failed\n",P_DEVNAME);
      Retry++; if(Retry==5)exit(1); continue; }
    if(portinit(devidd)<0)
    { printf("SND_TELE Port initial failed\n");
      close(devidd); exit(1); }
    break;
  }
  printf("SND_AUTO begin .\n");
  semid=semset();
  printf("Semid is %d\n",semid);
  for(ijk=1;ijk<=9999;ijk++)
  { yymmdd();
    len=0;     
    sprintf(&buf[len],"zczc %s%04d\n%c",P_TELFIX1,ijk,0);
    len=strlen(buf);
    sprintf(&buf[len],"r nanjing ts1 5 %d %02d%02d\n%c",id1,ih1,imn,0);
    len=strlen(buf);
    sprintf(&buf[len],"%s %s\n%c",P_TELEADDR,P_POSTOFFICE,0);
    len=strlen(buf);
    sprintf(&buf[len],"%05d %02d%02d0 00168\n%c",ijk%53+1,id1,ih1,0);
    len=strlen(buf);
    sprintf(&buf[len],"nnnn%c",0);
    strtoup(buf1);
    statusx=semopena(semid,P_SENDTEL);
    write(devidd,buf,sizeof(buf));
    statusx=semclose(semid,P_SENDTEL);
    printf("SND_AUTO send telegram NO. ijk=%d\n",ijk);
    sleep(20);
  }
}
void strtoup(char *strp)
{ int s_length,i,ich;
  s_length=strlen(strp);
  if(s_length != 0)
  for(i=0;i<s_length;i++)
  { ich=*(strp+i);
    *(strp+i)=toupper(ich);
  }
}
void strtolo(char *strp)
{ int s_length,i,ich;
  s_length=strlen(strp);
  if(s_length != 0)
  for(i=0;i<s_length;i++)
  { ich=*(strp+i);
    *(strp+i)=tolower(ich);
  }
}
void yymmdd(void)
{
  time_t idymd;
  struct tm cdymd;
  struct tm *cdymdp;
  cdymdp=&cdymd;
  time(&idymd);
  cdymdp=localtime(&idymd);
  cdymd=*cdymdp;
  iy1=cdymd.tm_year;
  im1=cdymd.tm_mon+1;
  id1=cdymd.tm_mday;
  ih1=cdymd.tm_hour;
  imn=cdymd.tm_min;
}
int portinit(int devid)
{ struct termio	tm;
  int num;
  if (ioctl(devid,TCGETA,&tm)<0)
  { printf("SND_TELE Can't get %s speed\n",P_DEVNAME);
    return(-1);}
/*
  tm.c_cflag&=~(CBAUD|CSTOPB|PARENB|PARODD);
  tm.c_cflag|=(P_PORTBAUD|P_DATABIT);
  tm.c_iflag|=(IXON|IGNCR|BRKINT|IXOFF|IXANY|IGNBRK);
  tm.c_iflag&=~(ISTRIP);
  tm.c_oflag|=(ONLCR|OFDEL|NL0|CR0|TAB3|BS0|VT0|FF1);
  tm.c_oflag&=~(OLCUC|OCRNL|ONOCR|ONLRET|OFILL|OPOST);
  tm.c_lflag|=(FLUSHO|TOSTOP);
  tm.c_cflag&=~(ECHO|ICANON|NOFLSH|PENDIN);
  tm.c_cc[VMIN]=1;
  tm.c_cc[VTIME]=0;
*/
  tm.c_oflag=TAB3|OPOST|ONLCR;
  tm.c_cflag=(B9600|CS8|CREAD);
  tm.c_cc[VMIN]=1;
  tm.c_cc[VTIME]=0;
  if (ioctl(devid,TCSETA,&tm)<0)
  { printf("SEN_TELE Can't set %s speed\n",P_DEVNAME);
    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 + -