2022-8-5 关于共享内存的一些基本操作

本文档详细介绍了两个进程A和B如何通过共享内存进行交互:A进程首先写入一个整数和字符串,然后B进程读取并显示这些内容。展示了ftok、shmget和shmat等系统调用的使用。

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

1. A进程写入一个整型,在该整型后,写入一个字符串
2. B进程将共享内存中的整型以及字符串读取出来;
A进程的发送端代码
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<stdlib.h>
#include<string.h>
#include<sys/shm.h>
//a进程
int main(int argc, const char *argv[])
{
	//创建共享文件
	key_t key =ftok("./",5);
	if(key<0)
	{
		perror("ftok");
		return -1;
	}

	//创建共享内存
	
	int shmid=shmget(key,32,IPC_CREAT|0777);
	if(shmid<0)
	{
		perror("shmget");
		return -1;
	}
	printf("shmid =%d\n",shmid);
	//共享内存的映射
	void *shmaddr=shmat(shmid,NULL,0);

	//写入
	int *p=(int*)shmaddr;
	*p=666;

	char *q=(char*)(p+1);
	strcpy(q,"hello");
	system("ipcs -m");


	return 0;
}

B进程的接收端代码

 #include<stdio.h>                                  
 #include<sys/types.h>                              
 #include<sys/ipc.h>                                
 #include<stdlib.h>                                 
 #include<string.h>                                 
 #include<stdio.h>                                  
 #include<sys/shm.h>                                
 //b进程                                            
 int main(int argc, const char *argv[])             
 {                                                  
     //创建共享文件                                 
     key_t key =ftok("./",5);                     
     if(key<0)                                      
     {                                              
         perror("ftok");                            
         return -1;                                 
     }                                              
                                                    
     //创建共享内存                                 
                                                    
     int shmid=shmget(key,32,IPC_CREAT|0777);       
     if(shmid<0)                                    
     {                                              
         perror("shmget");                          
         return -1;                                 
     }                                              
     printf("shmid =%d\n",shmid);                   
                         
                                                    
     //共享内存的映射                               
     void *shmaddr=shmat(shmid,NULL,0);             
                                                    
     //du                                        
     int *p=(int*)shmaddr;                          
     printf("%d\n",*p);                                                                              
     char *q=(char*)(p+1);                          
     printf("%s\n",q);                             
         system("ipcs -m");     

     return 0;                                      
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值