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

📄 mysms.c

📁 这是在linux下利用GPS MODERM通过串口进行短信发送的源代码
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <errno.h>#include <ctype.h>#include <sys/types.h>#include <unistd.h>#include <memory.h>#include <time.h>#include <termio.h>#include <iconv.h>#include <mysql/mysql.h>#include "send.h"MYSQL           lmy_connection;MYSQL_RES       *lres_ptr;MYSQL_ROW       lsql_row;int port_read( int fd, void *buffer, int length ){	int byte_left;        int byte_read;        char *ptr;	ptr = buffer;	byte_left = length;	while( byte_left > 0 )	{		byte_read = read( fd,ptr,byte_left );		if( byte_read < 0 )		{			if( errno == EINTR )				byte_read = 0;			else				return ( -1 );		}		else if( byte_read == 0 )			break;		byte_left -= byte_read;		ptr += byte_read;	}	return( length-byte_left );}void elog( char *logstr ){    	FILE *lfp;        time_t timep;	char filename[30];	memset( filename, 0, sizeof(filename) );	sprintf( filename, "/home/xnjf/sms/errlog" );    	time( &timep );        lfp = fopen( filename, "a+" );    	if( lfp == NULL )	        return;    	fprintf( lfp, "**********%s***********\n", ctime( &timep) );    	fprintf( lfp, "%s\n", logstr );    	fclose( lfp );  	return;}void time2string(char *str,time_t tim){        strftime(str,15,"%Y%m%d%H%M%S%s",localtime(&tim));        return;}void curr_date( char *str ){        time_t tim;        tim = time( NULL );        time2string( str, tim );        return;}/*char *GetNote( char *str ){	FILE 	*fp;	char 	file[24],line[80],tmp[20];	char 	ch;	char 	*temp,*val;		sprintf( file, "/home/ywh/sms/sms.h" );	if( ( fp = fopen( file, "r" ) ) == NULL )	{		elog( "Not found the find" );		exit( 0 );	}	while( 1 )	{		memset( line, 0x0, 80 );		fgets( line, sizeof( line ), fp );		if( strstr( line, str ) != NULL )		{			temp = strtok( line, "=" );			temp = strtok( NULL, "=" );			sprintf( val, "%s", temp );		}		else			continue;		ch = fgetc( fp );		if( ch == EOF )			break;	}	fclose( fp );	return 1;}*/int OpenDev( char *Dev ){	int	fd;	fd = open( Dev, O_RDWR | O_NOCTTY | O_NDELAY );	fcntl( fd, F_SETFL, 0 );	if( fd == -1 )	{		elog( "Can't open serial port\n" );		return -1;	}	else		return fd;}/*功能:判断cardinfo_tb中是否存在未处理的记录(未处理:flag=0;已处理:flag=1)*//*参数:code:从数据库中获得的手机号码;alarminfo:获取的预警信息*//*返回:-1:error; 0:back value is empty; 1:back value >= 1*/int GetValue( char *code, char *passwd, int *type ){	int	sn,nums,flag;	char 	lsql[300]; 	sprintf( lsql, "select sn,usephone,decode( cardpasswd,'zyq' ),usetype from cardinfo_tb where (usetype='5' or usetype='8') limit 1" );	if( mysql_opr( &lmy_connection, lsql ) ||		( lres_ptr=(MYSQL_RES *)mysql_store(&lmy_connection))==NULL )	{		elog( "mysql_select error" );                return 0;        }	nums =  mysql_num_rows( lres_ptr );        if( !nums ){                mysql_free_result( lres_ptr );                return 0;        }	lsql_row =  mysql_fetch_row( lres_ptr );        sn = atoi( lsql_row[0] );	sprintf( code, "%.11s", lsql_row[1] );	sprintf( passwd, "%.17s", lsql_row[2] );	*type = atoi( lsql_row[3] );	mysql_free_result( lres_ptr );	return sn;}/*功能:根据id号把处理过的记录的标志位置1*//*参数:fid:id号*//*返回:无返回值*/int UpdateFlag( int id, int flag ){	char	day[20];	char 	lsql[200];		memset( day, 0x0, sizeof( day ) );	curr_date( day );		if( flag == 5 )		sprintf( lsql, "update cardinfo_tb set usetype=1,usedate='%.8s',usetime='%.6s' where sn=%d", day, day+8, id );	else if( flag == 8 )		sprintf( lsql, "delete from cardinfo_tb where sn=%d", id );	if( mysql_opr( &lmy_connection, lsql ) ){                elog( "mysql_update error" );                return 0;        }	return 1;}int HmCovert( char *code, char *ncode ){	int	i,len;	char	aa;	sprintf( ncode, "%s", code );	len = strlen( code );		for( i=0; i<=len; i=i+2 )	{		if( i+1 >= len )		{			ncode[i+1] = ncode[i];			ncode[i] = 'F';		}		else		{			aa = ncode[i+1];			ncode[i+1] = ncode[i];			ncode [i] = aa;		}	}	return 1;}int IntToHex( char *str, int len ){	sprintf( str, "%02x", len );	return 1;}int TouAlpha( char *str ){	 int i,j;	 j = 0;	 for( i=0; str[i] != 0; i++ )		 if( islower( str[i] ) )			 str[i] = toupper( str[i] );	 return 1;}unsigned char ctou( char *cmess, char *umess ){	iconv_t cd;	char *inptr, *wrptr;	size_t insize,avail;	inptr=cmess;	wrptr=umess;	cd=iconv_open("UCS2", "euc-cn" );	avail=140;	insize=strlen(cmess);	iconv( cd, &inptr, &insize, &wrptr, &avail);	iconv_close(cd);	return( ( unsigned char )( 140-avail));}	int GetSendInfo( Smg *sinfo ){	int  i,slen,len,datalen;	unsigned char msglen;	char smsc[20];	char a,b;	char out[100];	char nstr[20],hstr[6],cmsg[120],tmp[160];	char buff[100],tt[10],ll[3],omsg[120];		memset( buff,0x0, 100 );	memset( out,0x0, 100 );	memset( omsg,0x0, 100 );	memset( nstr, 0, 20 );	memset( hstr, 0, 6 );	sprintf( smsc, SMSC );	HmCovert( smsc, nstr );	slen = strlen( nstr )/2+1;	IntToHex( hstr, slen );	sprintf( sinfo->smsinfo, "%s91%s1100", hstr, nstr );	memset( nstr, 0, 20 );	memset( hstr, 0, 6 );		HmCovert( sinfo->mobile, nstr );	len = strlen( nstr )-1;	IntToHex( hstr, len );	sprintf( tmp, "%s81%s", hstr, nstr );	strcat( sinfo->smsinfo, tmp );	memset( cmsg, 0, 120 );	memset( hstr, 0, 6 );	msglen = ctou( sinfo->alarmstr, cmsg );	memcpy( buff, cmsg, msglen );	for( i=0; i<msglen; i++ )	{		sprintf( tt, "%02x", buff[i] );		if( strlen( tt ) > 2 )			sprintf( ll, "%.2s", tt+strlen(tt)-2 );		else			sprintf( ll, "%.2s", tt );		strcat( omsg, ll );	}	for( i=0; i<strlen( omsg ); i+=4 )	{		a = omsg[i];		b = omsg[i+1];		omsg[i] = omsg[i+2];		omsg[i+1] = omsg[i+3];		omsg[i+2] = a;		omsg[i+3] = b;	}		len = strlen( omsg )/2;	IntToHex( hstr, len );	sprintf( tmp, "0008A7%s%s", hstr, omsg );	strcat( sinfo->smsinfo, tmp );	sinfo->smsinfo[strlen(sinfo->smsinfo)] = 0x1a;	TouAlpha( sinfo->smsinfo );		datalen = strlen( sinfo->smsinfo )/2-1-slen;	sprintf( sinfo->smslen, "%d", datalen );}int SendSms( int fd, Smg *sinfo){	char buff[500];	char smsstr[200];	char *dev;		memset( buff, 0x0, sizeof( buff ) );	GetSendInfo( sinfo );	sprintf( smsstr, "AT+CMGS=%s\r", sinfo->smslen );	write( fd, smsstr, strlen(smsstr) );	sleep(2);	//printf( "buff=%s\n", buff );	write( fd, sinfo->smsinfo, strlen(sinfo->smsinfo) );		//ReadComPort( fd, buff, sizeof( buff ) );	elog ( buff );	fprintf( stdout, "%s", buff );	fflush( stdout );	return 1;}

⌨️ 快捷键说明

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