当前位置:首页 > 内存 > 正文

共享内存实现通信代码(共享内存容量和独显哪个好)

  • 内存
  • 2024-06-04 23:07:34
  • 9542

一、如何用C语言实现采用共享内存的进程间通信共享内存的功能如下:
(1)intshmget(key_tkey,intsize,intshmflg),打开或使用一部分共享内存。
(2)void*shmat(intshmid,constvoid*shmaddr,intshmflg),将shmid参数指向的共享内存连接到当前进程。
使用共享内存时,首先需要使用shmat建立连接。
(3)intshmdt(constvoid*shmaddr),断开先前连接到shmat的共享内存与当前进程的连接。shmaddr参数是shmat返回的共享内存的地址。
使用完共享内存后,需要使用shmdt来断开它。
(4)intshmctl(intshmid,intcmd,structshmid_ds*buf),控制内存操作。当cmd为IPC_RMID时,清除shmid指向的共享内存。
这些函数的头文件是
下面是如何使用共享内存进行进程间的示例通信:进程A打开新的共享内存,进程B修改共享内存,进程C打印出共享内存的内容,进程D清空共享内存。
BCD进程操作的命令格式为:命令共享内存ID,如./output123432。
进程A的代码如下:
intmain()
{
intshmid;
shmid=shmget(IPC_PRIVATE,SIZE,IPC_CREAT|0600);
if(shmid<0)
{
perror("shmgeterror");
exit(1);
printf("=%d/n",shmid);
return0;
进程B的代码如下:
intmain(intargc,char*argv[])
{
intshmid;
char*shmaddr;
if(argc!=2)
{
perror("argcerror/n");
exit(1);
shmid=atoi(argv[1]);
shmaddr=(char*)shmat(shmid,NULL,0);
if((int)shmaddr==-1)
{
perror("shmaterror./n");
exit(1);
strcpy(shmaddr,"你好世界!");
shmdt(shmaddr);
return0;
C代码过程如下:
intmain(intargc,char*argv[])
{
intshmid;
char*shmaddr;
if(argc!=2)
{
printf("argcerror/n");
exit(1);
shmid=atoi(argv[1]);
shmaddr=(char*)shmat(shmid,NULL,0);
if((int)shmaddr==-1)
{
perror("shmaterror./n");
exit(1);
printf("%s/n",shmaddr);
shmdt(shmaddr);
return0;
该进程的D代码如下:
intmain(intargc,char*argv[])
{
intshmid;
if(argc!=2)
{
perror("argcerror/n");
exit(1);
shmid=atoi(argv[1]);
shmctl(shmid,IPC_RMID,NULL);
return0;
}


二、怎么用.net技术实现进程间通讯1.进程间通信方式
1)共享内存
包括:内存映射文件、共享内存DLL、剪贴板。
2)命名管道和匿名管道
3)消息的通信
4)使用代理方法。例如,SOCKETS、配置文件和注册表方法。
等等。
方法一:沟通。
进程间通信的方式有很多种。常用的方法有共享内存(内存映射文件、共享内存DLL、剪贴板等)、命名管道和匿名管道、消息发送等。直接完成它。此外,进程间数据通信任务可以通过套接字端口、配置文件和注册表间接实现。上述每种方法都有优点和缺点。当涉及到进程之间快速交换大量数据时,还可以消除使用配置文件和注册表的方法,由于需要使用管道和套接字以及网络适配器支持,因此可以忽略。通过这种方式,唯一可用的通信选项是共享内存和发送消息。
2.发送消息前的准备工作,实现进程间通信
以下示例使用windowsapi32函数
[DllImport("",EntryPoint="SendMessage")]
privatestaticexternintSendMessage(IntPtrwnd,intmsg,IntPtrwP,IntPtrlP);
要拥有这个功能,需要添加pServices命名空间
这个方法各个参数的含义
wnd:接收消息的窗口句柄。如果该参数为HWND_BROADCAST,则该消息将被发送到系统中的所有顶级窗口,包括无效或不可见的非拥有窗口、被覆盖的窗口和弹出窗口,但该消息不会被发送到子窗口。
msg:指定发送的消息类型。
wP:消息内容。
lP:指定有关消息规范的附加信息。
使用API​​参考手册验证SendMessage的使用时,参考手册提示
SendMessage和PostMessage的区别:SendMessage和PostMessage,虽然这两个函数的功能很相似,但是它们都是负责向指定窗口发送消息。消息,但SendMessage()函数发送消息并等待接收者的消息响应函数处理后才能返回并获取返回值。在此期间,发送方的程序将被阻塞,SendMessage()后面的语句无法继续执行,这意味着该方法是同步的。PostMessage()函数在消息发送后立即返回结果。后续语句可以立即执行,但无法从接收者的消息处理中获取返回值,这意味着该方法是异步的。
3.发送消息实现进程间通信的具体步骤
详细参考: