📄 main.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 + -