第二十三天:共享内存.消息队列及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;
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。