- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OS第七次上机(MS2010)
* 计算机操作系统 第七次上机 * 共享存储区通信的实现 共享存储区的建立 格式:int shmget(key,size,flag); 功能:利用系统调用shmget( )建立一块共享存储区。该系统调用将返回该共享存储区的描述符shmid;若尚未建立,便为进程建立一个指定大小的共享存储区。 返回值:若成功则返回共享存储ID,若出错则返回-1。 例:shmid=shmget(SHMKEY,1024,0777|IPC_CREAT); shmid=shmget(SHMKEY,1024,0777); * 共享存储区通信的实现 共享存储区的操纵 格式:int shmctl(shmid,cmd,*buf); 功能:可以用shmctl( )系统调用对共享存储区的状态信息进行查询,如其长度、所连接的进程数、创建者标识符等;也可设置或修改其属性,如共享存储区的许可权、当前连接的进程计数等;还可用来对共享存储区加锁或解锁,以及修改共享存储区标识符等。 返回值:若成功则返回0,若出错则返回-1。 * 共享存储区通信的实现 格式:int shmctl(shmid,cmd,*buf); cmd: IPC_RMID:从系统中删除该共享存储段 IPC_STAT:返回包含在指定的shmid相关数据结构中的状态信息,并读入buf IPC_SET:根据buf指向结构中的值,设置指定的shmid SHM_LOCK:将共享存储段锁定在内存中,只有超级用户才可以进行此项操作 SHM_UNLOCK:将共享存储段解锁,只有超级用户才可以进行此项操作 例:shmctl(shmid,IPC_RMID,0); * 共享存储区通信的实现 共享存储区的附接 格式:int shmat(shmid,*addr,flag); 功能:在进程已经建立了共享存储区或已获得了其描述符后,还须利用系统调用shmat( )将该共享存储区附接到用户给定的某个进程的虚地址*addr上,并指定该存储区的访问属性,即指明该区是只读,还是可读可写。此后,此共享存储区便成为该进程虚地址空间的一部分 。进程可采取与对其它虚地址空间一样的存取方法来访问。 返回值:若成功则返回共享存储的指针,若出错则返回-1。 * 共享存储区通信的实现 共享存储区的断开 格式:int shmdt(*addr); 功能:当进程不再需要该共享存储区时,可利用系统调用shmdt()把该区与进程断开。 返回值:若成功则返回0,若出错则返回-1。 * 例程序 有一个程序,实现了两个进程共享某一存储区, 一进程向共享存储区中写入要共享的内容,另一进程取到该内容后,打印取到的内容。 * * 上机要求 (上传)改写上一个程序,实现三个进程共享某一存储区,其中两个进程负责从键盘上随机输入要共享的内容,另一进程取到该内容后,打印取到的内容。 * 上机的步骤 编辑:将程序使用vi输入,扩展名.c; 编译:使用gcc进行编译 gcc 源文件名 -o 可执行文件 -o选项表示我们要求编译器将源文件编译输出为其后的可执行文件名 执行: ./可执行文件
文档评论(0)