📄 cmutex.h
字号:
#ifndef CMUTEXT_H#define CMUTEXT_H/////////////////////////////////////////////////////////////////////////////////#include <stdlib.h>#include <stdio.h>#include "my_lock.h"///////////////////////////////////////////////////////////////////////////////////子进程状态//csBorn 子进程新生//csWait 等待获得互斥量//csService 阻塞等待接收客户端的请求//csBusy 正在处理客户端的请求//csIdle 处于发呆状态//csDead 子进程已退出 死亡enum EChildState {csBorn = 0, csWait, csService, csBusy, csIdle, csDead};//子进程信息struct tagChildInfo{ int m_socket; pid_t m_chiPid; EChildState m_chiState;};class CMuTex{public: ///////////////////////////////////////////////////////////////////////////// // 隐藏默值和拷贝构造函数// CMuTex& operator=(const CMuTex&){}; CMuTex(void){}; CMuTex(const CMuTex&){}; tagChildInfo* m_ChiInfo; int m_childcount; int m_lostpid; //public: ///////////////////////////////////////////////////////////////////////////// //构造函数 参数 sum 表示主进程需要创建多少子进程 sum >= 1 CMuTex(int sum) { int I; printf("[CMuText ]子进程个数[%d]\n", sum); m_childcount = sum; //创建存储子进程状态的数组 并对其进行初始化 m_ChiInfo = (tagChildInfo *)malloc(sizeof(tagChildInfo) * sum); for(I = 0; I < sum ; I++) { SetChiProInfo(I, -1, -1, csDead); } // printf("[CMuText ] 初始化共享文件\n"); // my_lock_init(LOCK_FILE); } ///////////////////////////////////////////////////////////////////////////// //析造函数 ~CMuTex(){free(m_ChiInfo);}; ///////////////////////////////////////////////////////////////////////////// //等待获得互斥量的控制权 int WaitMutex( char *); ///////////////////////////////////////////////////////////////////////////// //释放对互斥量的控制权 int ReleaseMutex(); ///////////////////////////////////////////////////////////////////////////// //保存指定索引的子进程信息 void SetChiProInfo(int index, pid_t chipid, int socket, EChildState chistate); ///////////////////////////////////////////////////////////////////////////// //保存指定进程ID的子进程信息 void SetChiProInfoEx(pid_t chipid, EChildState chistate); ///////////////////////////////////////////////////////////////////////////// //得到子进程的状态 EChildState GetChiProState(int index); ///////////////////////////////////////////////////////////////////////////// //得到子进程的ID pid_t GetChiProPid(int index); ///////////////////////////////////////////////////////////////////////////// //查找指定进程号的进程是否退出 int ChiProIsLive(int pid); ///////////////////////////////////////////////////////////////////////////// //得到指定进程的套接字 int GetChiProSoc(int index, int pid=0); //监控子进程的状态 int WatchChiPro();};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -