fm_main.c
字号:
#include<gnome.h>#include<gtk/gtk.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 <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>//888888888#include"sendto.h"//8090 8095#include"share_mem.h"//#include"Bcmd.h"//8100#include"Bcmd_bk.h"//8200 /*include windows*/#include"FM_window.h"#include"SySInfo.h"#include"popmenu.h"#include"bg.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"Bcmd.h"#include"control_c.h"#define NUM 2#define FALSE_sg 0#define TRUE_sg 1int Okay;void sig_child() { signal(SIGCHLD, sig_child); Okay = FALSE_sg; }/*心爱好处利器,监控哪一个进程死亡,通知主号数,PID是一个唯一标志*/ 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 //int pids[NUM];/*进程的个数,放在一个数组里面*/ int i,j; int pid; 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 = 0x01034850;/*共享内存的 地址*/ /* 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 */ 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; } j=0x8000; for(i=0;i<30;i++) { aw->SgNode_DynTab[i][1]=0x01; aw->SgNode_DynTab[i][0]=j++; } 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; j=0x4000; for(i=0;i<17;i++) { aw->SwNode_DynTab[i][0]=j++; aw->SwNode_DynTab[i][1]=0xaa; aw->SwNode_DynTab[i][2]=0; aw->SwNode_DynTab[i][3]=0xaa; } aw->flag_fd=0; j=0x2000;for(i=0;i<25;i++) { aw->FdNode_DynTab[i][0]=j++; 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)//Acheck { printf("\tAcheck is started up pid= %d\n",getpid()); B_receivecmd();/*接收网罗通信动态马进程*/ }if((aw->pids[1]=fork())==0)//Acheck { printf("\tAcheck is started up pid= %d\n",getpid()); B_receivecmd_bk();/*上面的备份*/ }/*if((pids[2]=fork())==0)//A_receivecmd { printf("\tAreceivecmd is started up pid= %d\n",getpid()); fm_main(argc,argv); }*/fm_main(argc,argv); while(1)/*监控哪一个进程丝网,PID能监测到*/{ Okay=TRUE_sg; while(Okay) /* pause */ usleep(1); pid=wait(NULL); /* exiting pid */ for(i=0;i<NUM;i++)/*根据PID重起相应的进程*/ { 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)//Acheck { printf("\tAcheck is started up pid= %d\n",getpid()); B_receivecmd(); } break; } case 1: { if((aw->pids[1]=fork())==0)//Acheck { printf("\tAcheck is started up pid= %d\n",getpid()); B_receivecmd_bk(); } break; } /* case 2: { if((pids[2]=fork())==0)//A_receivecmd { printf("\tAreceivecmd is started up pid= %d\n",getpid()); fm_main(argc,argv); } break; }*/ }//switch}//while(1) //free the memory/*应该不修改号码.键盘响应来释放内存*/}//main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -