sharedmemory共享内存的概念共享内存是通信效率最高的IPC方式,因为进程可以直接读写内存,不需要复制数据。但是它没有自己的同步机制,需要通过信号量等方法进行同步。共享内存创建后,同一块物理内存被映射到多个进程地址空间。当一个进程修改共享内存中的数据时,其余进程可以看到修改的内容,反之亦然。mmap函数函数原型:voidmmap(voidadrr,size_tlength,intprot,intflags,intfd,off_toffset);返回值:成功:返回创建的映射区首地址;失败:返回MAP_FAILED具体参数含义:addr:指向映射区的首地址,由系统内核决定,一般设置为NULL;length:要创建的映射区域的大小;prot:映射区的权限,一般为:PROT_EXEC映射区可执行PROT_READ映射区可读PROT_WRITE映射区可写入PROT_NONE映射区不可访问需要调用msync()或munmap();MAP_PRIVATE:对映射区域所做的修改不会反映在物理设备上。fd:创建映射区的文件描述符;offset:映射文件的偏移量,一般设置为0,表示从头开始映射。mumap函数函数原型:intmunmap(void*addr,size_tlength);function功能:就像malloc之后的free一样,mmap调用创建的映射区用完后,需要调用munmap释放。示例程序写入程序:1#include2#include3#include4#include5#include6#include7#include89typedefstruct10{11intid;12charname[20];13chargender;14}stu;1516intmain(intargc,char*argv[])17{18stu*p=NULL;19intfd=0;20stustudent={10,"harry",'m'};2122if(argc<2){23printf("useage:./a.out文件\n");24return-1;25}2627fd=open(argv[1],O_RDWR|O_CREAT,0664);28if(fd==-1){29printf("错误:打开失败!\n");30返回-1;31}32ftruncate(fd,sizeof(stu));3334p=mmap(NULL,sizeof(stu),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);35if(p==MAP_FAILED){36printf("ERROR:mmapfailed!\n");37return-1;38}3940close(fd);4142while(1){43memcpy(p,&student,sizeof(stu));44student.id++;45sleep(2);46}47munmap(p,sizeof(stu));4849return0;50}阅读程序:1#include2#include3#include4#include5#include6#include78typedefstruct9{10intid;11charname[20];12chargender;13}stu;1415intmain(intargc,char*argv[])16{17stu*p=NULL;18intfd=0;1920if(argc<2){21printf("useage:./a.输出文件\n");22return-1;23}2425fd=open(argv[1],O_RDONLY);26if(fd==-1){27printf("错误:打开失败!\n");28return-1;29}3031p=mmap(NULL,sizeof(stu),PROT_READ,MAP_SHARED,fd,0);32if(p==MAP_FAILED){33printf("错误:mmap失败!\n");34return-1;35}3637close(fd);3839while(1){40printf("id=%d,name=%s,gender=%c\n",p->id,p->name,p->gender);41sleep(2);42}4344munmap(p,sizeof(stu));4546return0;47}更多精彩内容请关注公众号良旭Linux,在公众号回复1024免费获得5T技术资料,包括:Linux、C/C++、Python、RaspberryPi、Embedded、Java,人工智能,等公众号的回复进群,邀你加入高手云技术交流群。最后,最近有很多朋友找我要一份Linux学习路线图,所以我结合自己的经验,利用业余时间熬夜一个月,整理了一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以和我一起把这本电子书做得更完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站