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

📄 main.c

📁 UNIX/LINUX平台下面SMS网管原代码
💻 C
字号:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <memory.h>
#include <sys/types.h>
#include <signal.h>
#include <sys/time.h> 

#include "etc.h"
#include "link.h"

#define		INTERVAL	5

extern SmsData_t *sm;

char dbfile[128];
char uid[56], pin[56], svc[56];

int GetDbParam(char *uid, char *pin, char *svc);
void HandleSms();
void SysExit();

extern void SendSms();

int main(int argc, char *argv[])
{
	struct itimerval value, ovalue;
	int sec = 5;
	int ret = -1;

	signal(SIGHUP, SIG_IGN);
   	signal(SIGINT, SIG_IGN);
   	signal(SIGQUIT,SIG_IGN);
   	signal(SIGTERM, SIG_IGN);
   	signal(SIGCLD, SIG_IGN);
        signal(SIGIOT, SIG_IGN);
        signal(SIGABRT, SIG_IGN);
        signal(SIGUSR1, SIG_IGN);

        signal(SIGILL, SysExit);
        signal(SIGFPE, SysExit);
        signal(SIGSEGV, SysExit);
        signal(SIGUSR2, SysExit);

	ret = fork() ;
	if ( ret < 0 || ret > 0 ) {
		exit( FAILURE) ;
	}

	setpgrp() ;
	/* 数据库配置文件 */
	memset(dbfile, 0, sizeof(dbfile));
	sprintf(dbfile, "%s/etc/database.cfg", getenv("HOME"));
	
	/* 连接数据库 */
	if( GetDbParam(uid, pin, svc) )
	{
		fprintf(stdout, "GetDbParam failed\n");
		return FAILURE;
	}

	//signal(SIGVTALRM, HandleSms);
	signal(SIGALRM, HandleSms);
	//signal(SIGPROF, HandleSms);

	value.it_value.tv_sec = 10;
	value.it_value.tv_usec = 0;
	value.it_interval.tv_sec = 10;
	value.it_interval.tv_usec = 0;
	ret = setitimer(ITIMER_REAL, &value, &ovalue);
	//ret = setitimer(ITIMER_VIRTUAL, &value, &ovalue);
	//ret = setitimer(ITIMER_PROF, &value, &ovalue);

	for(;;);
	
	return SUCCESS;
}

void HandleSms()
{
	SmsData_t *p;
	int ret = -1;
	int i = 0;
	char inbuf[160], outbuf[160];
	char str1[200], str2[200];
	int ilen = 0;
	int olen = 0;
	
	if( DB_connect(uid, pin, svc) )
	{
		fprintf(stdout, "ConnectDB failed\n");
		return ;
	}

	fprintf(stdout, "Connected to database.\n");

	/* 扫描数据 */
	fprintf(stdout, "Scanning data...");
	if( DB_ScanSmsData() != SUCCESS)
	{
		fprintf(stdout, "DB_ScanSmsData failed\n");
		return ;
	}

	p = sm;
	while(p != NULL)
	{
		memset(inbuf, 0, sizeof(inbuf));
		sprintf(inbuf,"SendSMS:Mobile=%s\r\nMsg=%s", p->inumber, p->idata);
		fprintf(stdout, "[%d][%s][%d]\n", ++i, inbuf, p->iid);
		ilen = strlen(inbuf);

		sleep(1);
		memset(outbuf, 0, sizeof(outbuf));
		CommSms(outbuf, &olen, inbuf, ilen);
		DB_SetSmsStatus(p->iid, 4);
		p=p->next;
	}

	if( sm != NULL ) DestroyLink(sm);

	DB_close();
	fprintf(stdout, "Done.CloseDb.\n");

	return ;
}

int GetDbParam(char *uid, char *pin, char *svc)
{
	/* uid */
	memset(uid, 0, sizeof(uid));
	if(GetValueFromEtcFile(dbfile, "DATABASE", "userid", uid, 32)!=ETC_OK)
        {
                printf("GetValueFromEtcFile FOR DATABASE failed\n");
                return FAILURE;
        }

	/* pwd */
	memset(pin, 0, sizeof(pin));
	if(GetValueFromEtcFile(dbfile, "DATABASE", "password", pin, 32)!=ETC_OK)
        {
                printf("GetValueFromEtcFile FOR DATABASE failed\n");
                return FAILURE;
        }

	/* service */
	memset(svc, 0, sizeof(svc));
	if(GetValueFromEtcFile(dbfile, "DATABASE", "service", svc, 32)!=ETC_OK)
        {
                printf("GetValueFromEtcFile FOR DATABASE failed\n");
                return FAILURE;
        }

	return SUCCESS;
}
void SysExit()
{
	fprintf( stdout, "sms[%d] exit by signal !\n", getpid()) ;
	exit( SUCCESS) ;
}

⌨️ 快捷键说明

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