当前位置: 首页 > news >正文

谁知道苏州溪城水处理网站谁做的惠州网站建设技术支持

谁知道苏州溪城水处理网站谁做的,惠州网站建设技术支持,个人建设网站难吗,表白网页制作代码共享内存#xff0c;顾名思义就是允许两个不相关的进程访问同一个逻辑内存#xff0c;共享内存是两个正在运行的进 程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中#xff0c…         共享内存顾名思义就是允许两个不相关的进程访问同一个逻辑内存共享内存是两个正在运行的进 程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中所有的进程都可以访问共享内存中的地址。如果某个 进程向共享内存写入数据所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。 Linux 操作系统的进程通常使用的是虚拟内存虚拟内存空间是有由物理内存映射而来的。System V 共 享内存能够实现让两个或多个进程访问同一段物理内存空间达到数据交互的效果。 共享内存和其他进程间数据交互方式相比有以下几个突出特点 1.速度快因为共享内存不需要内核控制所以没有系统调用。而且没有向内核拷贝数据的过程所以效率和前面几个相比是最快的可以用来进行批量数据的传输比如图片。 2. 没有同步机制需要借助 Linux 提供其他工具来进行同步通常使用信号灯。 使用共享内存的步骤 1. 调用 shmget() 创建共享内存段 id 2. 调用 shmat() 将 id 标识的共享内存段加到进程的虚拟地址空间 3. 访问加入到进程的那部分映射后地址空间可用 IO 操作读写。 在Linux系统中有多种方式可以实现共享内存其中一种是使用POSIX共享内posix_shm。POSIX共享内存有两种方法 1.内存映射文件 先用open函数打开一个文件然后调用mmap函数把得到的描述符映射到当前进程地址空间中。这种方式访问速度相对较慢因为需要内核同步或异步更新到文件系统中。 1代码 #include stdio.h #include stdlib.h #include fcntl.h #include sys/mman.h #include unistd.h int main() { // 打开文件 int fd open(example.txt, O_RDWR); if (fd -1) { perror(Error opening file); exit(EXIT_FAILURE); } // 获取文件大小 struct stat sb; if (fstat(fd, sb) -1) { perror(Error getting the file size); exit(EXIT_FAILURE); } off_t length sb.st_size; // 文件大小单位是字节 // 映射内存到进程的地址空间 char* map mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (map MAP_FAILED) { perror(Error mmapping the file); exit(EXIT_FAILURE); } // 打印映射的内存内容即文件内容 for (off_t i 0; i length; i) { printf(%c, map[i]); // 打印每个字符即文件内容 } printf(\n); // 释放内存映射和文件描述符 if (munmap(map, length) -1) { perror(Error un-mmapping the file); exit(EXIT_FAILURE); } close(fd); return 0; } 2注解 open函数用于打开文件其返回值是文件描述符。如果打开失败则返回-1。第二个参数O_RDWR表示以读写模式打开文件。fstat函数用于获取文件的大小其返回值是stat结构体其中st_size成员表示文件大小单位是字节。如果获取失败则返回-1。mmap函数用于将文件映射到进程的地址空间。第一个参数是映射区域的起始地址通常为NULL。第二个参数是映射区域的长度。第三个参数是保护标志这里设置为读、写和共享可读、可写、可被其他进程共享。第四个参数是映射对象的类型这里设置为共享内存。第五个参数是文件描述符。第六个参数是文件映射的偏移量。如果映射成功则返回映射区域的指针否则返回MAP_FAILED。munmap函数用于释放内存映射。第一个参数是映射区域的指针。第二个参数是映射区域的长度。如果释放成功则返回0否则返回-1。 2.共享内存对象 先用shm_open打开一个Posix IPC名字也可以是文件系统中的一个路径名然后调用mmap将返回的描述符映射到当前进程的地址空间。 1代码 #include stdio.h #include stdlib.h #include fcntl.h #include sys/mman.h #include unistd.h #define SHM_SIZE 1024 // 共享内存大小 int main() { int fd; void *map_ptr; // 打开共享内存对象以读写模式打开不创建新对象如果对象不存在则返回-1 fd shm_open(/Posix IPC, O_RDWR | O_CREAT, 0666); if (fd -1) { perror(shm_open); exit(EXIT_FAILURE); } // 调整共享内存对象的大小这里将其设置为1024字节 if (ftruncate(fd, SHM_SIZE) -1) { perror(ftruncate); exit(EXIT_FAILURE); } // 将共享内存对象的描述符映射到当前进程的地址空间map_ptr指向的就是这块内存的起始地址 map_ptr mmap(NULL, SHM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (map_ptr MAP_FAILED) { perror(mmap); exit(EXIT_FAILURE); } // 现在可以在map_ptr指向的内存区域进行读写操作了这就像操作普通的内存一样简单 // ... 写入数据到 map_ptr 指向的内存区域 ... // ... 从 map_ptr 指向的内存区域读取数据 ... // 当进程不再需要访问共享内存时可以通过调用munmap来撤销内存映射参数是map_ptr和映射的长度 if (munmap(map_ptr, SHM_SIZE) -1) { perror(munmap); exit(EXIT_FAILURE); } // 关闭共享内存对象的描述符然后删除该对象参数是fd和0表示删除成功返回0否则返回-1 if (close(fd) -1) { perror(close); exit(EXIT_FAILURE); } if (shm_unlink(/my_shm) -1) { perror(shm_unlink); exit(EXIT_FAILURE); } return 0; } 2注解 shm_open函数用于打开或创建共享内存对象。第一个参数是对象名第二个参数是打开模式这里使用读写模式第三个参数是权限设置这里设置为0666表示所有用户都可以读写这个对象。如果对象不存在shm_open会创建一个新对象。如果创建成功shm_open会返回一个文件描述符。如果失败返回-1。ftruncate函数用于调整共享内存对象的大小。第一个参数是文件描述符第二个参数是新的文件大小。这里将文件大小设置为1024字节。如果成功ftruncate返回0否则返回-1。mmap函数用于将共享内存对象的描述符映射到当前进程的地址空间。第一个参数是映射区域的起始地址通常为NULL第二个参数是映射区域的长度第三个参数是保护标志这里设置为读、写和共享第四个参数是映射对象的类型这里设置为共享内存第五个参数是文件描述符第六个参数是文件映射的偏移量。如果映射成功mmap返回映射区域的指针否则返回MAP_FAILED。 3.总结 在使用共享内存时需要注意同步问题。因为多个进程可以同时操作共享内存可能导致数据不一致。互斥锁和信号量等同步机制可以解决这个问题。 共享内存是一种非常有效的进程间通信方式尤其适用于大数据量的传输和频繁的通信需求。但是使用共享内存时需要注意同步和数据一致性问题。
http://www.w-s-a.com/news/774861/

相关文章:

  • 网站开发维护专员岗位职责辽阳企业网站建设
  • 做外国订单有什么网站网站设计论文提纲
  • 商城网站建设报价方案导师让做网站
  • 清远市企业网站seo联系方式动易官方网站
  • 手机上怎么做能打开的网站一级域名和二级域名跨域
  • 网站首页效果图wordpress 在线教育
  • 电商网站开发团队广西桂林商贸旅游技工学校
  • 网站模板文件怎么下载东莞常平镇邮政编码
  • 建网站需要什么wordpress误删的后果
  • wordpress无插件实现网站地图做阿里巴巴网站店铺装修费用
  • 英文互动网站建设南宁住房和城乡建设局网站
  • 威海微网站建设乐清建网站哪家强
  • 网站和app的开发成本saas系统开发教程
  • ps切片工具做网站大气简洁网站
  • 网至普的营销型网站建设wordpress邮箱验证插件下载
  • 找权重高的网站方法张家港早晨网站建设
  • WordPress数据库添加管理员关键词优化举例
  • 河南国基建设集团--官方网站wordpress qode
  • 做农村电子商务的网站有哪些内容静态网站模板古典
  • 导航网站设计方案个人网站推广方法
  • 网站排名易下拉教程防wordpress花园
  • 计算机网站建设 是什么意思现在网站建站的主流语言是什么
  • php网站跟随导航西安百姓网免费发布信息网
  • 濮阳做公司网站html5 特效网站
  • ppt设计器怎么打开深圳seo网络推广营销
  • 建设银行网站用360浏览器建设信用卡中心网站
  • 创建公司网站 教程广州建设局
  • 详述网站建设的过程简答题ui培训设计怎么样
  • 动易网站官网ppt主题大全素材
  • 怎样用eclipse做网站可以做宣传图的网站