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

📄 mm_main.c~

📁 linux下的人机对话编程
💻 C~
字号:
#include<gnome.h>#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"sendto_ABcmd.h"//8060 8065#include"sendto_QT.h"//8020,8030#include"M_check_Mstate_bk.h"#include"share_mem.h"//#include"Check_Astate.h"//8040//#include"Check_Bstate.h"//8050#include"Check_Mstate.h"//sys_check//#include"Mserver_B_getdata.h"//8020//#include"Mserver_B_getdata_bk.h"//8030//#include"Mserver_A_getdata.h"//8000//#include"Mserver_A_getdata_bk.h"//8010#include"Mserver_getdata.h"//8000#include"Mserver_getdata_bk.h"//8010#include"Mserver_Acmd.h"//8070#include"Mserver_Acmd_bk.h"//8075//#include"Mserver_Bcmd.h"//8080//#include"Mserver_Bcmd_bk.h"//8085/*include windows*///#include "ILDATATYPE.h"#include"static_tab.h"#include "M_window.h"//#include "SearchID.h"//#include "Valid_oper.h"#include"popmenu.h"#include"bg.h"#include"SySInfo.h"#include"toggle.h"#include"sg.h"#include"switch.h"#include"field.h"#include"line.h"#include"text.h"#include"sig.h"#include"frame.h"//#include"echo_fd.h"#include"control_c.h"#define OBFILE "/proc/stat"#define LEN 16348#define NUM 6 #define FALSE_sg 0#define TRUE_sg 1int Okay;void sig_child() {   signal(SIGCHLD, sig_child);   Okay = FALSE_sg; }gint main(gint argc,gchar *argv[]){#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 = 0x00123001; /* sample keys */   key_t mkey = 0x00125451;//   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->Sys_main_cpu_gl=1;	ap->Sys_main_hub_gl=1;        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_sys_check=1;   /* 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;/*init the window share memory A */   union semun un_win;   int flag_win = (IPC_CREAT | IPC_EXCL | 0660);   int size_win = sizeof(struct area_window);   key_t skey_win = 0x00123020; /* sample keys */   key_t mkey_win = 0x00034511;   /* get a shared memory area */   shmid_win=shmget(mkey_win, size_win, flag_win);   /* attach the shared memory area */   aw=(struct area_window *)shmat(shmid_win, 0, 0);   /* initialize account info in shared memory */   int j; aw->flag_revInfo=0;/*以下为初始化内存变量*/	aw->flag_sg=0;	for(i=0;i<30;i++)		{		for(j=2;j<4;j++)		aw->SgNode_DynTab[i][j]=0;		}	 int sg=0x8000;	for(i=0;i<30;i++)		{		aw->SgNode_DynTab[i][1]=0x01;		aw->SgNode_DynTab[i][0]=sg++;		}	aw->SgNode_DynTab[10][1]=0x03;	aw->SgNode_DynTab[11][1]=0x03;	aw->SgNode_DynTab[20][1]=0x03;//flag_SG init	for(i=0;i<25;i++)	aw->flag_SG[i]=0;	aw->flag_sw=0;	 int sw=0x4000;        for(i=0;i<17;i++)                {                aw->SwNode_DynTab[i][0]=sw++;                aw->SwNode_DynTab[i][1]=0xaa;		aw->SwNode_DynTab[i][2]=0;		aw->SwNode_DynTab[i][3]=0xaa;		}	aw->flag_fd=0;	 int fd=0x2000;for(i=0;i<25;i++)                {                aw->FdNode_DynTab[i][0]=fd++;		aw->FdNode_DynTab[i][1]=0xaa;                aw->FdNode_DynTab[i][2]=0;                }   /* get and initialize a semaphore */   semid_win=semget(skey_win, 1, flag_win);   /* set semaphore available */   un_win.val=1;   semctl(semid_win, 0, SETVAL, un_win);   /* first and only semaphore */   buf_win.sem_num=0;   /* wait if set */   buf_win.sem_flg=0;   /* setup SIGCHLD handler */   signal(SIGINT,control_c);   signal(SIGCHLD, sig_child);if((aw->pids[0]=fork())==0)//check_M        {        printf("\tsys_check is started up pid= %d\n",getpid());	sys_check(); 	}aw->pid_parent=aw->pids[0]-1;if((aw->pids[1]=fork())==0)//Mserver_getdata   {        printf("\tMserver_getdata is started up pid= %d\n",getpid());        Mserver_getdata();   }if((aw->pids[2]=fork())==0) //Mserver_getdata_bk  {        printf("\tMserver_getdata_bk is started up pid= %d\n",getpid());        Mserver_getdata_bk();  }//ifif((aw->pids[3]=fork())==0)//Mserver_Acmd   {        printf("\tMserver_Acmd is started up pid= %d\n",getpid());        Mserver_Acmd();   }if((aw->pids[4]=fork())==0)//Mserver_Acmd_bk   {        printf("\tMserver_Acmd_bk is started up pid= %d\n",getpid());        Mserver_Acmd_bk();   }if((aw->pids[5]=fork())==0)//Mserver_Acmd_bk   {        printf("\tMserver_Acmd_bk is started up pid= %d\n",getpid());	M_window(argc,argv);   }//M_window(argc,argv);while(1){	Okay=TRUE_sg;      while(Okay) /* pause */         usleep(1);      pid=wait(NULL); /* exiting pid */      for(i=0;i<NUM;i++)        {	if(pid==aw->pids[i])        break;	}      printf("\tSubtask #%d ended, pid = %d\n", i, aw->pids[i]);	switch(i)	{		 case 0:                        {			if((aw->pids[0]=fork())==0)//check_M		        {		        printf("\tsys_check is started up pid= %d\n",getpid());		        sys_check();		        }			break;                                        }		 case 1:                        {			if((aw->pids[1]=fork())==0)//Mserver_getdata			{		        printf("\tMserver_getdata is started up pid= %d\n",getpid());		        Mserver_getdata();			}                        break;                                                                  }		  case 2:                        {                        if((aw->pids[2]=fork())==0)//Mserver_getdata_bk                        {                        printf("\tMserver_getdata is started up pid= %d\n",getpid());                        Mserver_getdata_bk();                        }                        break;                        }		case 3:                        {			if((aw->pids[3]=fork())==0)//Mserver_Acmd			{		        printf("\tMserver_Acmd is started up pid= %d\n",getpid());		        Mserver_Acmd();			}                        break;                        }		case 4:                        {                        if((aw->pids[4]=fork())==0)//Mserver_Acmd_bk                        {                        printf("\tMserver_Acmd_bk is started up pid= %d\n",getpid());                        Mserver_Acmd_bk();                        }                        break;                        }		 case 5:                        {                        if((aw->pids[5]=fork())==0)//Mserver_Acmd_bk                        {                        printf("\tMserver_Acmd_bk is started up pid= %d\n",getpid());                        M_window(argc,argv);                        }                        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 + -