首页 > 代码库 > 第二十三天:共享内存.消息队列及mysql数据库使用

第二十三天:共享内存.消息队列及mysql数据库使用

共享内存和消息队列也是进程间的通信方式。

共享内存,(和信号量的操作类似)

#include<sys/shm.h>

1、int shmget(key_t key,size_t size,int shmflg);

作用:新建一块内存或者返回已建好的内存

参数:key,用于表示开辟一段内存,各进程通过这个标志访问同一块内存

      size,内存的大小

      shmflg,和文件操作完全相同权限表示,按位或IPC_CREATE表示创建一块内存,如果key表示的内存已经建立,即使加了IPC_CREATE也不会新建一块内存,会返回key关联的内存。

返回值:返回一个标示符,其他对共享内存的操作,用到该返回值

2、void *shmat(int shm_id,const void * shm_addr,int shmflg);

作用:讲一段共享内存连接到当前进程

参数:shm_id,shmget的返回值

      shm_addr连接到当前进程的地址位置,一般为NULL,表示让系统来选择

      shmfig:SHM_RND,与shm_addr联合使用,控制连接地址

             SHM_RDONLY,只读

             一般设为0

   返回值:指向共享内存第一字节的指针

3、int shmdt(const void * shm_addr);

作用:将共享内存从当前进程分离出去

参数:shmat的返回值

4、int shmctl(int shm_id,int command,struct shmid_ds * buf);

structshmid_ds {

    uid_t shm_perm.uid;

    uid_t shm_perm.gid;

    mode_t shm_prem.mode;

}

作用:对共享内存的控制

参数:shm_id,shm_get的返回值

      commond,IPC_STAT:把shmid_ds中的值设为当前共享内存状态值

               IPC_SET:把共享内存状态设为shmid_ds中的值

               IPC_RMID:删除共享内存段

消息队列

#include<sys/msg.h>

1、int msgget(key_t key,int msgflg);

作用:创建和访问一个消息队列

参数:key,键值表示一个消息队列

         msgflg,权限标志位,与shmget标志位类似

返回值:返回一个描述符,用于其他消息队列函数中

2、int msgsnd(int msqid,const void * msg_ptr,size_t msg_sz,int msgflg);

   一般把消息用下边结构体表示

  struct my_message{

    long int message_type;//表示数据类型

    /*The data you wish to transfer*/

}

   作用:把消息添加到消息队列

   参数:msqid,msgget的返回值

         msg_ptr,指向准备发送消息的指针

         msg_sz,消息长度不包括长整形消息类型变量

         msgflg控制当前队列满或达到系统最大限度时发生的事情,一般设为0

3、int msgrcv(int msqid,void * msg_ptr,size_t msg_sz,long intmsgtype,int msgflg);

    作用:从消息队列中接收消息

    参数:msqid,msgget函数的返回值

          msg_ptr,指向准备接收消息的指针

          msg_sz,接受消息的大小,不包括表示类型的第一个变量

          msgtype,接受类型

          msgflg,控制没有消息接收时发生的事情,一般设为0

5、int msgctl(int msqid,int commond,struct msqid_ds * buf);

structmsqid_ds {

   uid_t msg_perm.uid;

   uid_t msg_perm.gid;

   mode_t msg_perm.mode;

}

http://blog.csdn.net/coderlrx/article/details/8762017

第二十三天:共享内存.消息队列及mysql数据库使用