Files
svc.ems/src/performanceMgr/c_program/cstaCollector/cstamain.c
2024-09-27 15:39:34 +08:00

185 lines
3.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*************************************************
File name: cstamain.c
Author: JianHui Zheng
Version: 9:00:00
Date: 2007-7-2
Description:cstaCollector模块的main文件该文件可以使模块独立运行
调用外部函数
void iptrans_init();
void snmp_init(int port);
调用csta.c文件函数
void csta_init();
History:
No.
Author
Date
Version
Description
*************************************************/
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include "csta.h"
static struct itimerval itimer, old_itimer;
void onCstaCollectorTimer();
void setCstaCollectorTimer();
void setup_daemon(void);
int timerCounter = 0;
/*************************************************
Function: // main
Description: // main函数可以使模块独立运行
Calls: // iptrans_init; snmp_init; csta_init; setCstaCollectorTimer;
Called By: // csta.c:csta_init;
Table Accessed: //
Table Updated: //
Input: // int argc, char *argv[]
Output: //
Return: //
Others: //
*************************************************/
int main(int argc, char *argv[])
{
char runMode;
runMode = getopt(argc, argv, "d");
//获取运行参数
switch (runMode)
{
case 'd':
setup_daemon();
break;
case '?':
break;
}
//IP平台模块初始化
fprintf(stderr, "\n Calling iptrans_init() \n");
iptrans_init();
//snmp模块初始化
fprintf(stderr, "\n Calling snmp_init() \n");
snmp_init(4957);
//cstaCollector模块初始化
fprintf(stderr, "\n Calling csta_init() \n");
csta_init();
//设定定时器
setCstaCollectorTimer();
while (1) {
usleep(50);
}
return (1);
}
/*************************************************
Function: // onCstaCollectorTimer
Description: // 设定定时器函数
Calls: // csta_timer;
Called By: // setCstaCollectorTimer;
Table Accessed: //
Table Updated: //
Input: // int argc; char *argv[];
Output: //
Return: //
Others: //
*************************************************/
void onCstaCollectorTimer()
{
csta_timer();
}
/*************************************************
Function: // setCstaCollectorTimer
Description: // 开启定时器函数
Calls: // setitimer;
Called By: // main;
Table Accessed: //
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void setCstaCollectorTimer()
{
struct sigaction act;
act.sa_handler = onCstaCollectorTimer;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if (sigaction(SIGALRM, &act, NULL) < 0) {
perror("Produce Sigaction");
exitLog("cstaCollector:setCstaCollectorTimer, sigaction function error");
exit(1);
}
itimer.it_interval.tv_sec = 0;
itimer.it_interval.tv_usec = 10 * 1000;
itimer.it_value.tv_sec = 0;
itimer.it_value.tv_usec = 10 * 1000;
if (setitimer(ITIMER_REAL, &itimer, &old_itimer) != 0) {
printf("Setting Timer error! \n");
exitLog("cstaCollector:setCstaCollectorTimer, setitimer function error");
exit(1);
}
}
/*************************************************
Function: // setup_daemon
Description: // 将程序设为后台进程
Calls: // fork;
Called By: // main;
Table Accessed: //
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void setup_daemon(void)
{
//复制进程
switch (fork())
{
case -1:
{
perror("setup_daemon(), 1st fork()");
exit(2);
}
default:
exit(0);
case 0:
if (setsid() == -1)
{
perror("setup_daemon(), setsid()");
exit(3);
}
switch (fork())
{
case -1:
{
perror("setup_daemon(), 2nd fork()");
exit(3);
}
default:
exit(0);
case 0:
umask(0);
/* and return with daemon set up */
return;
}
}
}