第4章-进程同步.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章-进程同步

msgctl() 4)int msgctl(int msqid, int cmd, struct msqid_ds *buf); 该系统调用对由msqid标识的消息队列执行cmd操作,共有三种cmd操作:IPC_STAT、IPC_SET 、IPC_RMID。 IPC_STAT:该命令用来获取消息队列信息,返回的信息存贮在buf指向的msqid结构中; IPC_SET:该命令用来设置消息队列的属性,要设置的属性存储在buf指向的msqid结构中;可设置属性包括:msg_perm.uid、msg_perm.gid、msg_perm.mode以及msg_qbytes,同时,也影响msg_ctime成员。 IPC_RMID:删除msqid标识的消息队列; 调用返回:成功返回0,否则返回-1。 * msqid_ds struct msqid_ds{ struct_ipc_perm msg_perm; //许可权结构 __kernel_t time_t msg_stime; //最后发送消息的时间 __kernel_t time_t msg_rtime; //最后接收消息的时间 __kernel_t time_t msg_ctime; //最后更改时间 unsigned short msg_qnum; //队列上消息数 unsigned short msg_qbytes; //队列上最大字节数 __kernel_ipc_pid_t msg_lspid; //最后发送消息进程的pid __kernel_ipc_pid_t msg_lrpid; //最后接收消息进程的pid }; * 消息队列应用实例参考程序 1、server.c #include sys/types.h #include sys/msg.h #include sys/ipc.h #define MSGKEY 75 struct msgform { long mtype; char mtext[1000]; }msg; int msgqid; * void server( ) { msgqid=msgget(MSGKEY,0777|IPC_CREAT); /*创建75#消息队列*/ do { msgrcv(msgqid,msg,1030,0,0); /*接收消息*/ printf(“(server)received\n”); } while(msg.mtype!=1); msgctl(msgqid,IPC_RMID,0); /*删除消息队列,归还资源*/ exit(0); } main( ) { server( ); } * 消息队列应用实例参考程序 2、client.c #include sys/types.h #include sys/msg.h #include sys/ipc.h #define MSGKEY 75 struct msgform { long mtype; char mtext[1000]; }msg; int msgqid; * void client() { int i; msgqid=msgget(MSGKEY,0777); /*打开75#消息队列*/ for(i=10;i=1;i--) { msg.mtype=i; printf(“(client)sent\n”); msgsnd(msgqid,msg,1024,0); /*发送消息*/ } exit(0); } main( ) { client( ); } * 3. 共享内存 共享内存提供了一种在进程间高效共享大量数据的方法。共享内存是IPC 机制提供的最重要资源之一,广泛用在许多数据库应用之中。 System V 的共享内存段由shmget()系统调用创建。在创建共享内存段之后,进程通过shmat()系统调用将自身附加到该共享内存段上,然后就可以对其执行读写操作。进程还可以通过shmdt()系统调用将自身脱离内存段。 由于共享内存为多个进程提供了一种公共资源,它经常和信号量一起使用以防止发生碰撞。 * 涉及的系统调用 1、shmget( ) 创建、获得一个共享存储区。 系统调用格式: shmid=shmget(key,size,flag) 参数定义,key是共享存储区的名字;size是其大小(以字节计);flag是用户设置的标志,如IPC_CREAT。IPC_CREAT表示若系统中尚无指名的共享存储区,则由核心建立一个共享存储区;若系统中已有共享存储区,便忽略IPC_CREAT。 附: 操作允许权

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档