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

📄 b.c

📁 Unix下的c语言控制model的程序 是用来银行催款的一个老程序
💻 C
字号:
/**This is aleaned line communication program**/#include <stdio.h>#include <fcntl.h>#include <signal.h>#include <termio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#define MAXLINE		80#define TIMEOUT		10#define KEYS	        60#define KEYR	        61#define TXBUFLEN	200#define	START_CHAR	0xfe#define	END_CHAR	0xfd#define STX	0x02#define ETX	0x03#define ENQ	0x05#define	ACK	0x06#define NAK	0x15#define FS	0x1c#define FAIL 	-1#define FAIL_TIMEOUT 	-2#define TIMEOUT1	30char *strchr();static int timeout=0;static char *termname;unsigned char buff[300],sndbuf[TXBUFLEN],rcvbuf[TXBUFLEN];struct tx_type{	//char acct_card[9];	/* 证券资金卡号 */	char acct_card[8];	/* 证券资金卡号 */	char card[20];		/* 银行卡号 */	char pos_date[9];	/* 交易日期 */	char tid[9];		/* POS终端号 */	char mid[16];		/* POS商户号 ** */	char id[3];  		/* POS操作员号 */	char proc_code[3];	/* 处理码 : 01 银行转出, 02 证券转出				   	     41 冲正01  , 42 冲正02   */	char amount[13];	/* 交易金额: 除以100为真实金额 */	char trace_num[7];	/* 票据号 */	char resp_code[4];	/* 返回码 */	char pin[9];		/* 密码 */       };		struct stock_type{		    char database_flag;		    char szgddm[8];		    char shgddm[10];		    char czh[8];		    char yhzh[20];		    char sfzh[15];		    char htxh[6];		    char qsdm[6];		    char yhdm[2];		    char cqlb;		    char je[10];		    char wtrq[8];		    char wtsj[8];		    char czmm[6];		    char bmjy[40];		    char fsbz;		    char clbz;		    char cjbz;		    char errmsg[4];		    char sl[8];		    char zqdm[6];		    char ye[12];		    char kys[12];		    char tid[9];		};		txexit(){	fprintf(stderr,"COMMUNICATION program exit\n\r");	exit(0);}static int readout(){	timeout=1;}static int settimeout(){	fprintf(stderr,"timeout on opening %s\n\r",termname);	timeout=1;}main(argc,argv)int argc;char *argv[];{	int speed=B9600;	int ttyid,i,len;	long msgtype;	unsigned char buf[100];	signal(SIGINT, txexit);	signal(SIGTERM,txexit);	signal(SIGUSR1,txexit);	signal(SIGCLD,SIG_IGN);	if (argc<2||argc>4) {		fprintf(stderr,"usage:nfcomm ttyname [speed]\n\r");		exit(1);		}	if ((ttyid=ttyopen(argv[1],O_RDWR))==-1) {		/*fprintf(stderr,"cannot open %s\n\r",argv[1]);*/		fprintf(stderr,"打开 %s 失败\n\r",argv[1]);		exit(1);		}	if (!isatty(ttyid)) {		fprintf(stderr,"设备 %s not a tty\n\r",argv[1]);		exit(1);		}	if (argc==3&&(speed=getspeed(argv[2]))==-1) {		fprintf(stderr,"Invalid speed specified\n\r");		exit(1);		}	if (tty_raw(ttyid,speed,1,0)==-1) {		fprintf(stderr,"%s ioctl error\n\r",argv[1]);		exit(1);		}	sbqstop();	printf("here %d\n",ttyid);	sprintf(buf,"ATDT0,13311000201%c",13);	write(ttyid,buf,strlen(buf));	l1:	goto l1;	gets(buf);	exit(1);	i=fork();	if(i==0)		{		exit(0);		snd(ttyid);		}	else	if(i>0)	rcv(ttyid);	else	fprintf(stderr,"Fork error \n\r");}tty_raw(fd,speed,min,time)int fd,speed,min,time;{	struct termio fdbuf;	if (!isatty(fd)) 		return(-1);	if (ioctl(fd,TCGETA,&fdbuf)==-1)		return(-1);	fdbuf.c_iflag=0;	fdbuf.c_oflag=0;	fdbuf.c_lflag=0;	fdbuf.c_cflag&=~CBAUD;			/*mask off baud rate*/	fdbuf.c_cflag|=speed;			/*set new bps=speed*/	fdbuf.c_cflag&=~PARENB;			/*NO check */	fdbuf.c_cflag&=~CSIZE;			/*mask off size*/	fdbuf.c_cflag|=CS8;			/*set new size=8 bit*/	fdbuf.c_cflag&=~CSTOPB;			/*1 stop bit*/	fdbuf.c_cc[VMIN]=min;	fdbuf.c_cc[VTIME]=time;	return ioctl(fd,TCSETAW,&fdbuf);}	getspeed(s)char *s;{	int speed;	switch(atoi(s)) {		case 300:	speed=B300;	break;		case 1200:	speed=B1200;	break;		case 2400:	speed=B2400;	break;		case 4800:	speed=B4800;	break;		case 9600:	speed=B9600;	break;		default:	speed=-1;		}	return speed;}ttyopen(filename,flag)char *filename;int flag;{	int (*sigfn)(),fd=-1;		termname=filename;	timeout=0;	sigfn=signal(SIGALRM,settimeout);	alarm(TIMEOUT);	fd=open(filename,flag);	alarm(0);	signal(SIGALRM,sigfn);	return(timeout ? -1:fd);}rcv(fd)int fd;{	int i,n;	unsigned char c;	FILE *fp;	struct stock_type *stock_ptr;	long msgtype;	char buf[4];	unsigned char flag;	stock_ptr=(struct stock_type *)malloc(sizeof(struct stock_type));	signal( SIGUSR1, txexit );		if((fp=fopen("log.rcv","a"))==NULL){			fprintf(stderr,"log.rcv权限不够或文件被锁!\n\r");			exit(-1);		}	while(1) 	{		i=0;	 	/*----  read tty  ----*/		do {			read(fd,&c,1);		//fprintf(stderr,"%02x ",c);		}while(c!=START_CHAR);		memset( rcvbuf, '\0', TXBUFLEN );		do {			if ((n=read(fd,&c,1))!=1)			{				/*fprintf(stderr,"read comm_port fail!\n\r");*/				fprintf(stderr,"读串口失败 !\n\r");				continue;			}			if (c==END_CHAR) break;			//fprintf(stderr," [%x] ",c);			rcvbuf[i]=c;				i++;		}while(c!=END_CHAR);					n=i;		/*fprintf(stderr,"i=%d\n",i);*/		fprintf(stderr,"receive report:\n");		for(i=0;i<n;i++)		{		fprintf(stderr,"%02x ",rcvbuf[i]);		}		fprintf(stderr,"\nreceive report:ok \n");		stock_ptr=(struct stock_type *)rcvbuf;		/*  write rcv msg  */	}		fclose(fp);}snd(fd)int	fd;{	int len,i,n;	unsigned char c,channelno;	FILE *fp;	char buff[300],buf[TXBUFLEN];	struct stock_type *stock_ptr;	long msgtype;	char buf_channel[4];		stock_ptr=(struct stock_type *)malloc(sizeof(struct stock_type));	memset(buf_channel,0,4);	while(1) 	{		if((fp=fopen("log.snd","a"))==NULL){			fprintf(stderr,"log.snd权限不够或文件被锁!\n\r");			exit(-1);		}	/*  read snd msg  */		memset(sndbuf,0,TXBUFLEN);		msgtype=0L;/*		if ((len=receive(KEYS,sndbuf,&msgtype,0)) == FAIL)		{			fprintf(stderr,"Receive queue KEYS failed:\n\r");			exit(FAIL);		}		else if (len == FAIL_TIMEOUT)		{			fprintf(stderr,"Receive queue KEYR timeout:\n\r");			continue;		}		else fprintf(stderr,"RECEIVE FROM queue KEYS SUCCESS!!!\n\r");		fprintf(stderr,"len=%d  ",len);	*/		stock_ptr=(struct stock_type *)sndbuf;		fprintf(stderr,"write ls ok!\n\r");		fclose(fp);	/*  write tty  */		//n=atoi(stock_ptr->tid);		memcpy(buf_channel,stock_ptr->tid,4);		buf_channel[3] = 0;		n = atoi(buf_channel);		channelno=n;		c=START_CHAR;		if ((n=write(fd,&c,1))!=1) 		{			/*fprintf(stderr,"write comm_port fail !\n\r");*/			fprintf(stderr,"写串口失败 !\n\r");			continue;		}		else 			fprintf(stderr,"n=%d write START_CHAR ok\n\r",n);		fprintf(stderr,"channelno=%x\n",channelno);		if ((n=write(fd,&channelno,1))!=1)		{			/*fprintf(stderr,"write comm_port fail!\n\r");*/			fprintf(stderr,"写串口失败 !\n\r");			continue;		}		else 			fprintf(stderr,"n=%d write channelno ok\n\r",n);		i=0;		while(i<len){			c=sndbuf[i];			i++;			if ((n=write(fd,&c,1))!=1) 			{			/*	fprintf(stderr,"write comm_port fail!\n\r");*/				fprintf(stderr,"写串口失败 !\n\r");				continue;			}			else			fprintf(stderr," [%x] ",c);		}		c=END_CHAR;		if ((n=write(fd,&c,1))!=1) 		{			/*fprintf(stderr,"write comm_port fail!\n\r");*/			fprintf(stderr,"写串口失败 !\n\r");			continue;		}		else		/*printf(" [%x] ",c);*/		fprintf(stderr,"n=%d  WRITE END CHAR ok\n\r",n);	}}		int sbqstop()	{	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -