共享内存函数接口

打印 上一主题 下一主题

主题 1666|帖子 1666|积分 4998

共享内存

共享内存是物理内存中的一段内存空间,而物理内存是由内核举行维护的,所以进程必须向利用系统申请一块物理内存。
shmget函数

利用此函数可以向内核申请物理内存
  1. int shmget(key_t key,size_t size,int shmflg)
  2. //key:IPC对象使用的键值,ftok()函数生成一个唯一的键值key
  3. //size:新的共享内存段的大小,其值等于四舍五入之后的PAGE_SIZE倍数的大小
  4. //shmflg:可以是IPC_CREAT和IPC_EXCL
  5. //ret:成功返回共享内存的标识符id,失败返回-1
  6. //notice:创建新的内存段的时候会把该内存段进行清零处理,相应的数据结构体也会被初始化
复制代码
shmat函数

该函数可以实现把共享内存映射到进程的内存空间。
  1. void *shmat(int shmid, const void *shmaddr, int shmflg);
  2. //shmid:共享内存的id
  3. //shmaddr:映射后的地址,一半由系统指定,填NULL即可
  4. //shmflg:填0即可,表示默认,权限为可读可写
  5. //ret:成功返回追加成功的共享内存的地址,失败返回(void *) -1
复制代码
shmdt函数

此函数可以解除映射
  1. int shmdt(const void *shmaddr);
  2. //shmaddr:是shmat函数的返回值
  3. //ret:成功返回0,失败返回-1
复制代码
shmctl函数

该函数实现设置共享内存的属性、获取共享内存的属性、删除共享内存等相干利用。
  1. struct shmid_ds {
  2.                struct ipc_perm shm_perm;    /* Ownership and permissions */
  3.                size_t          shm_segsz;   /* Size of segment (bytes) */
  4.                time_t          shm_atime;   /* Last attach time */
  5.                time_t          shm_dtime;   /* Last detach time */
  6.                time_t          shm_ctime;   /* Last change time */
  7.                pid_t           shm_cpid;    /* PID of creator */
  8.                pid_t           shm_lpid;    /* PID of last shmat(2)/shmdt(2) */
  9.                shmatt_t        shm_nattch;  /* No. of current attaches */
  10.                ...
  11.            };
  12. int shmctl(int shmid, int cmd, struct shmid_ds *buf);
  13. //shmid:共享内存的id
  14. //cmd:可以是IPC_SET、IPC_RMID、IPC_INFO等
  15. //buf:结构体的地址
  16. //ret:成功时返回 0,失败时返回 -1,并设置 errno 为相应的错误码。
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表