新创建共享内存的数据结构shmid_ds.PPTVIP

  • 105
  • 0
  • 约5.46千字
  • 约 23页
  • 2018-10-31 发布于天津
  • 举报
新创建共享内存的数据结构shmid_ds

* 五 进程通信 管道(pipe) 套接字(socket) System V IPC机制 消息队列 信号量 共享内存 1. 共享内存 --原理:允许一个或多个进程通过同时出现在它们的虚拟地址 空间的内存进行通信。该虚拟内存的页面在每一个共 享进程的页表中都有页表条目引用。 --同一块内存的不同形式: 说明:对共享内存的访问通过唯一的共同标志“key”控制,并进行 访问权限检查。 Key:在IPC通信模式下,唯一标识每个IPC对象的名字。 IPC 信号量 消息传递 共享内存 虚拟内存文件 虚拟内存 --共享内存的API 1)shmeget(): 创建一块共享内存。 2)shmat(): 将一块已存在的共享内存映射到一个进程的地址空间。 3)shmdt(): 取消映射(断开连接)。 4)shmctl(): 执行对共享内存的各种控制命令。 1)shmeget()://分配一块共享内存 函数声明: #include sys/ipc.h; //ipc_perm,ipc对象的权限信息 #include sys/shm.h; //shmid_ds,共享内存的结构 int shmget(key_t key, int size, int shmflg); 参数说明: key:共享内存的键值,在ipc对象的数据结构ipc_perm中。 一块已存在的共享内存的键值 0 //如果参数shmflg设置了IPC_CREATE标志,同样创建一块新的共享内存 IPC_PRIVATE //创建一块新的共享内存 取值 size:所需共享内存的最小尺寸(以页为单位)。 shmflg:共享内存属性标志(IPC_CREAT/IPC_EXCL)。 IPC_CREAT:如果共享内存不存在,则创建;否则打开。 IPC_EXCL :不存在共享内存时才建立新的共享内存;否则,产生错误。 返回值:成功,返回共享内存的标识符 不成功,-1,出错原因放在errno中。 新创建共享内存的数据结构:shmid_ds Include/linux/shm.h Struct shmid_ds { struct ipc_perm shm_perm; // 存取权限,在/linux/ipc.h中定义 int shm_segsz; // 共享内存大小 __kernel_time_t shm_atime; // 最后一次连接该共享内存时间 __kernel_time_t shm_dtime; //最后一次断开该共享内存时间 __kernel_time_t shm_ctime; //最后一次更改该共享内存时间 __kernel_ipc_pid_t shm_cpid; // 创建者进程标示符 __kernel_ipc_pid_t shm_lpid; //最后一个操作者进程标示符 unsigned short shm_nattch; // 连接共享内存的进程数 unsigned short shm_unused; // 兼容用 void *shm_unused2; // 备用 void *shm_unused3; //备用 }; 2)shmat()://连接一块共享内存 函数声明: #include sys/types.h; #include sys/shm.h; int *shmat(int shmid, const void *shmaddr, int shmflg); 参数说明: shmid:欲连接的共享内存的标识符。 shmaddr:欲连接的地址。 shmflg:共享内存属性标志(IPC_CREAT,IPC_EXCL等)。 返回值

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档