【IPC进程间通讯之中的一个】邮槽MailSlot

本文详细介绍了IPC(进程间通信)中的邮槽MailSlot通信机制,包括服务端与客户端的工作流程,邮槽的创建、读写及命名规则,并通过示例代码展示了如何在VC6.0环境下实现MailSlot通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IPC进程间通信+邮槽MailSlot

      
        IPC(Inter-Process Communication。进程间通信)。
       现代计算机採用虚拟内存机制,为进程提供独立的足够大的地址空间。处于安全目的,一个进程不具有特殊的权限。是无法訪问还有一个进程的内存空间,进程间相互隔绝。进程间通信IPC就须要特别的机制来实现。邮槽MailSlot是经常使用的IPC方法之中的一个。

        
       1.邮槽(MailSlot):
        
       邮槽MailSlot通信的进程分为服务端client。服务端创建MailSlot,创建时指定邮槽名,client同过邮槽名打开MailSlot。
       邮槽是单向的,服务端仅仅能读取MailSlot,client仅仅能写入MailSlot。服务端读取数据是先入先出,即先写入的数据先被读取。


        2.邮槽命名 :
        本机上格式:\\.\mailslot\[path\]name
        如:\\.mailslot\my_mailslot

       3.基本API函数
创建邮槽
        HANDLE  CreateMailSlot(
                          LPCTSTR  lpName,
                          DWORD     nMaxMessageSize,
                          DWORD     lReadTimeout,
                          LPSECURITY_ATTRIBUTES   lpSecurityAttributes );
        第一个參数:邮槽名。
        第二个參数:最大消息长度。
        第三个參数:读取超时,设为0时。没有消息马上返回。MAILSLOT_WAIT_FORVER时,一直等待消息。
        第三个參数:安全属性,一般设为NULL。

        该函数创建一个Mailslot。并返回该邮槽的句柄。

读取邮槽:       
        BOOL ReadFile(
                   
HANDLE    hFile,
                    LPVOID     lpBuffer,
                    DWORD    nNumberOfBytesToRead,
                    LPDOWRD    lpNumberOfBytesRead,
                    LPOVERLAPPED   lpOverlapped
)。
        第一个參数:邮槽句柄。
        第二个參数:缓存地址。

        第三个參数:消息的长度。

        第四个參数:实际读取的长度。
        第五个參数:一般设置为NULL。
        该函数用于读取邮槽内数据。
打开邮槽:
        BOOL  CreateFile(
                     LPCTSTR   lpFileName,
                     DWORD     dwDesiredAccess,
                     DWORD     dwShareMode,
                     LPSECURITY_ATTRIBUTES   lpSecurityAttributes,
                     DWORD    dwCreationDisposition,
                     DWORD    dwFlagsAndAttributes,
                    HANDLE    hTemplateFile
);
         第一个參数:文件指针。
         第二个參数:訪问模式。
         第三个參数:共享模式。

         第四个參数:安全属性指针。
         第五个參数:创建选项。
         第六个參数:文件属性。
         第七个參数:用于拷贝文件句柄。
         该函数用于client打开Mailslot。
写入邮槽:
        BOOL  WriteFile(
                     HANDLE    hFile,
                     LPCVOID   lpBuffer,
                     DWORD     nNumberOfBytesToWrite,
                     LPDWORD   lpNumberOfBytesWritten,
                     LPOVERLAPPED    lpOverlapped
);
         第一个參数:文件句柄。
         第二个參数:数据缓冲区指针。
         第三个參数:写入字节数。
         第四个參数:返回实际写入字节数。
         第五个參数:结构体指针。一般置NULL。

         该函数用于client向Mailslot写入数据。


         4.牛刀小试 : 
         先在VC6.0中执行服务端程序,在执行client程序

        执行效果

Mailslot服务端:
#include 
#include 
/* 全局变量 */
HANDLE hSlot;
//邮槽名
LPTSTR lpszSlotName = TEXT("\\\\.\\mailslot\\sample_mailslot");
void main()
{ 
	DWORD  cbRead; 
	char lpszBuffer[256]=" ";  
	
    //创建邮槽
	hSlot = CreateMailslot(
		lpszSlotName,		        // mailslot 名
		0,							// 不限制消息大小 
		MAILSLOT_WAIT_FOREVER,      // 无超时 
		(LPSECURITY_ATTRIBUTES) NULL); 
	printf("Mailslot 创建成功!\n");

	while(1)
	{

			// 读取消息
			ReadFile(hSlot,	    // mailslot句柄
	        lpszBuffer,			// 缓存
			256,			    // 消息的长度
			&cbRead,			// 实际读取的长度
			NULL); 

			// 显示
			printf("Data from the mailslot: %s\n", lpszBuffer); 

	}
	return ; 
}
Mailslotclient:
#include 
#include 
/* 全局变量 */
HANDLE hSlot;
LPTSTR lpszSlotName = TEXT("\\\\.\\mailslot\\sample_mailslot");		// mailslot名
void main()
{ 
	HANDLE hFile; 
	DWORD cbWritten; 
    char *send_data="I from client!";

	// 打开mailslot
	hFile = CreateFile(lpszSlotName, 
		GENERIC_WRITE,		// 可写
		FILE_SHARE_READ,
		(LPSECURITY_ATTRIBUTES) NULL, 
		OPEN_EXISTING,		// 打开一个已经存在的mailslot,应该由服务端已经创建
		FILE_ATTRIBUTE_NORMAL, 
		(HANDLE) NULL); 


	// 向mailslot写入
	WriteFile(hFile, 
		send_data, 
		(DWORD) (lstrlen(send_data)+1)*sizeof(TCHAR),  
		&cbWritten, 
		(LPOVERLAPPED) NULL); 


	// 结束
	printf("Data written:%s\n",send_data); 
	CloseHandle(hFile); 
	return ;
}


转载于:https://www.cnblogs.com/ldxsuanfa/p/10701336.html

内容概要:本文档详细介绍了一个基于MATLAB实现的跨尺度注意力机制(CSA)结合Transformer编码器的多变量时间序列预测项目。项目旨在精准捕捉多尺度时间序列特征,提升多变量时间序列的预测性能,降低模型计算复杂度与训练时间,增强模型的解释性和可视化能力。通过跨尺度注意力机制,模型可以同时捕获局部细节和全局趋势,显著提升预测精度和泛化能力。文档还探讨了项目面临的挑战,如多尺度特征融合、多变量复杂依赖关系、计算资源瓶颈等问题,并提出了相应的解决方案。此外,项目模型架构包括跨尺度注意力机制模块、Transformer编码器层和输出预测层,文档最后提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,尤其是熟悉MATLAB和深度学习的科研人员、工程师和研究生。 使用场景及目标:①需要处理多变量、多尺度时间序列数据的研究和应用场景,如金融市场分析、气象预测、工业设备监控、交通流量预测等;②希望深入了解跨尺度注意力机制和Transformer编码器在时间序列预测中的应用;③希望通过MATLAB实现高效的多变量时间序列预测模型,提升预测精度和模型解释性。 其他说明:此项目不仅提供了一种新的技术路径来处理复杂的时间序列数据,还推动了多领域多变量时间序列应用的创新。文档中的代码示例和详细的模型描述有助于读者快速理解和复现该项目,促进学术和技术交流。建议读者在实践中结合自己的数据集进行调试和优化,以达到最佳的预测效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值