操作系统上机实验三
实验三 信号通信
【实验软硬件环境】
Linux、Win11、GCC
【实验目的与内容】
利用信号通信机制在父子进程几兄弟进程间进行通信。
父进程创建一个有名事件, 由子进程发送事件信号,父进程获取事 件信号后进行相应的处理
【实验程序及分析】
Windows下
父进程代码father.cpp
1 |
|
子进程代码child.cpp
1 |
|
代码分析
创建事件
CreateEvent(NULL, FALSE, FALSE, TEXT("event")); /*创建一个有名事件*/
1
2
3
4
5
6
7
8
9HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes, // SD
BOOL bManualReset, // reset type
BOOL bInitialState, // initial state
LPCTSTR lpName // object name);参数说明:
pEventAttributes
:事件对象的安全属性,若设为NULL,则事件句柄不能被子进程继承。bManualReset
:指定是创建一个手动事件对象还是创建一个自动事件对 象。设为TRUE时为手动事件对象,必须调用ResetEvent()函数将事件 重置为无信号状态。设为FALSE时为自动事件对象,系统将会在进程获得事件信号后自动将事件状态复位为无信号状态。lpName
:用于指定事件名。若设为NULL时,则创建无名事件对象。返回值:如果创建事件对象成功,则返回事件对象的句柄;若失败,则返回NULL。
将一段内存块清零
ZeroMemory(&sui, sizeof(sui));
1
2
3
4
5VOID ZeroMemory( //将一段内存块清零
PVOID Destination, // memory block
SIZE_T Length // size of memory block);关闭句柄
1
2
3BOOL CloseHandle(
HANDLE hObject // handle to object);打开事件对象
1
2
3
4
5
6
7HANDLE OpenEvent(
DWORD dwDesiredAccess, // access
BOOL bInheritHandle, // inheritance option
LPCTSTR lpName // object name);参数说明:
dwDesiredAccess
:指定事件对象的访问权限。可取如下三个值的组合: EVENT_ALL_ACCESS,EVENT_MODIFY_STATE,SYNCHRONIZE。bInheritHandle
:指定函数的返回句柄是否可被继承。lpName
:要打开的事件对象的名称。将事件置为有信号状态
1
2
3BOOL SetEvent(
HANDLE hEvent // handle to event);
【实验截图】
【实验心得体会】
掌握了进程之间的信号通信
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 j52nnw9的博客!