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

📄 mserver_sys_check.c

📁 linux下的人机对话编程
💻 C
字号:
#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/sem.h>#include<sys/stat.h>#include<sys/time.h>//setpriority#include<sys/resource.h>//setpriority#include<signal.h>#include <stdio.h>#include <unistd.h>#include<stdlib.h>#include<fcntl.h>#include<errno.h>#include<time.h>#include"socket.h"#include"M_check_Mstate_bk.h"#include"M_check_Astate_bk.h"#include"M_check_Bstate_bk.h"#include"sys_check.h"#include"server_cmd.h"#include"write_log.h"#include"liansuo_count.h"#include"print.h"#define STATE_FILE "/zlm/state.log"#define OBFILE "/proc/stat"#define LEN 16348#define NUM 6 #define FALSE 0#define TRUE 1int Okay;void sig_child() {   signal(SIGCHLD, sig_child);   Okay = FALSE; }		main(void){   /* semaphores *///   struct sembuf buf_sem;#if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)   /* union semun is defined by including <sys/sem.h> */#else   /* otherwise, according to X/OPEN we have to define it ourselves */   union semun   {      int val;                    /* value for SETVAL */      struct semid_ds *buf;       /* buffer for IPC_STAT, IPC_SET */      unsigned short int *array;  /* array for GETALL, SETALL */      struct seminfo *__buf;      /* buffer for IPC_INFO */   };#endif    union semun un;   int flag = (IPC_CREAT | IPC_EXCL | 0660);   int size = sizeof(struct area);   key_t skey = 0x04030203; /* sample keys */   key_t mkey = 0x01020333;//   int semid; /* semaphore id *///   int shmid; /* shared memory id */   int pid_Sys_check;  /* Sys_check_state process child task pid */   int pid_server_cmd;  /*Mserver_cmd process  child task pid */	int pids[NUM];	int i;	int pid;   char inbuf[80];   /* get a shared memory area */   shmid=shmget(mkey, size, flag);   /* attach the shared memory area */   ap=(struct area *)shmat(shmid, 0, 0);   /* initialize account info in shared memory */   	ap->Mstate_gl=1;	ap->Astate_gl=1;	ap->Bstate_gl=1;        ap->Amain_server_gl=1;	ap->Bmain_server_gl=1;        ap->Sys_main_cpu_gl=1;	ap->Sys_main_hub_gl=1;        ap->Amain_port_gl=8000;	ap->Bmain_port_gl=8000;        ap->Mhost_name_gl="192.168.1.1";        ap->Ahost_name_gl="192.168.1.3";        ap->Bhost_name_gl="192.168.1.5";	ap->flag_server_cmd=0;	ap->flag_Sys_check=0;   /* get and initialize a semaphore */   semid=semget(skey, 1, flag);   /* set semaphore available */   un.val=1;   semctl(semid, 0, SETVAL, un);   /* first and only semaphore */   buf_sem.sem_num=0;   /* wait if set */   buf_sem.sem_flg=0;   /* setup SIGCHLD handler */   signal(SIGCHLD, sig_child);if((pids[0]=fork())==0)/*Mserver_A_getdata*/	{	char *argv[]={"Mserver_A_getdata",(char *)0};        printf("\tMserver_A_getdata is started up pid= %d\n",getpid());	//setpriority(PRIO_PROCESS,pids[0],-10);        execv("/zlm/Mserver_A_getdata",argv);	}if((pids[1]=fork())==0)/*Mserver_A_getdata_bk*/        {        char *argv[]={"Mserver_A_getdata_bk",(char *)0};        printf("\tMserver_A_getdata_bk is started up pid= %d\n",getpid());        execv("/zlm/Mserver_A_getdata_bk",argv);	}if((pids[2]=fork())==0)/*Mserver_B_gtdata*/        {          char *argv[]={"Mserver_B_getdata",(char *)0};          printf("\tMserver_B_getdata is started up pid= %d\n",getpid());        execv("/zlm/Mserver_B_getdata",argv); 	}if((pids[3]=fork())==0)/*Mserver_B_gtdata_bk*/        {          char *argv[]={"Mserver_B_getdata_bk",(char *)0};          printf("\tMserver_B_getdata_bk is started up pid= %d\n",getpid());        execv("/zlm/Mserver_B_getdata_bk",argv);        }if((pids[4]=fork())==0)   /* Sys_check_state */   {	printf("\tSys_check_state is started up pid= %d\n",getpid());        printf("\tFind the state_information in the file '/zlm/state.log'.\n");	sys_check();   }if((pids[5]=fork())==0) /*Mserver_cmd*/  {	 printf("\tMserver_cmd is started up pid= %d\n",getpid());	server_cmd();  }//ifwhile(1){	Okay=TRUE;      while(Okay) /* pause */         usleep(1);      pid=wait(NULL); /* exiting pid */      for(i=0;i<NUM;i++)        {	if(pid==pids[i])        break;	}      printf("\tSubtask #%d ended, pid = %d\n", i, pids[i]);	switch(i)	{		case 0:			{				if((pids[0]=fork())==0)/*Mserver_A_getdata*/        			{                		char *argv[]={"Mserver_A_getdata",(char *)0};                		printf("\nMserver_A_getdata is restarted up pid= %d\n",getpid());        			//setpriority(PRIO_PROCESS,pids[0],-10);        			execv("/zlm/Mserver_A_getdata",argv);        			}			break;			}		 case 1:                        {				if((pids[1]=fork())==0)/*Mserver_A_getdata_bk*/        			{		                char *argv[]={"Mserver_A_getdata_bk",(char *)0};                		printf("\tMserver_A_getdata_bk is restarted up pid= %d\n",getpid());			        execv("/zlm/Mserver_A_getdata_bk",argv);			        }			break;                                                                                                                   }		 case 2:                        {			        if((pids[2]=fork())==0)/*Mserver_B_gtdata*/        			{			        char *argv[]={"Mserver_B_getdata",(char *)0};		                printf("\tMserver_B_getdata is restarted up pid= %d\n",getpid());			        execv("/zlm/Mserver_B_getdata",argv);        			}			break;                                        }		 case 3:                        {				if((pids[3]=fork())==0)/*Mserver_B_gtdata_bk*/        			{			        char *argv[]={"Mserver_B_getdata_bk",(char *)0};		                printf("\tMserver_B_getdata_bk is restarted up pid= %d\n",getpid());			        execv("/zlm/Mserver_B_getdata_bk",argv);			        }                        break;                                                                                                    }		 case 4:                        {				if((pids[4]=fork())==0)   /* Sys_check_state */   				{			        printf("\tSys_check_state is restarted up pid= %d\n",getpid());        			sys_check();   				}                        break;                                                                                           }		case 5:			{				if((pids[5]=fork())==0) /*Mserver_cmd*/				{				  //  set semaphore		                buf_sem.sem_op=-1;                		semop(semid, (struct sembuf *) &buf_sem, 1);		                ap->flag_server_cmd=0;		                // clear semaphore		                buf_sem.sem_op=1;		                semop(semid, (struct sembuf *) &buf_sem, 1);			        printf("\tMserver_cmd is restarted up pid= %d\n",getpid());			        server_cmd(); 				}			break;			}	}//switch}//while(1)	//waitpid(pid_Sys_check);    /* remove shared memory, semaphore, and exit */   shmctl(shmid, IPC_RMID, (struct shmid_ds *) 0);   semctl(semid, 0, IPC_RMID, un);   return;}//main

⌨️ 快捷键说明

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