- 1、本文档共86页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十四章UNIX系统程序设计.ppt
第十四章 UNIX系统程序设计 系统调用返回值 (page 355) 大多数的系统调用都返回一个值。如打开一个文件的系统调用fd=open(name,mode)返回一个文件描述符fd。 当指定的文件不存在时返回 -1。返回值 -1指示一个系统调用可能失败了,这时系统的全局变量errno值为相应的出错代码。 系统还定义了另外两个外部变量,即对应于出错代码的消息数组sys_errlist和比该数组最大下标大1的整型变量sys_neer。 为了在系统调用失败后获得出错代码和出错信息,我们可以编写一个如下的C函数: #include stdio.h void syserr(syscall) char *syscall; { extern int errno,sys_nerr; extern const char *const sys_errlist[]; fprintf(stderr,"ERROR: %s %d", syscall,errno); if(errno0 errnosys_nerr) fprintf(stderr,"--%s\n", sys_errlist[errno]); else fprintf(stderr,"\n"); exit(1); } 14.3 高级的进程间通信 (p316) 14.3.1 消息通信 1.生成一个消息队列 int msgget(key,flags) /* 获取消息队列标识数 */ key_t key; /* 消息队列关键字,长整型 */ int flags; /* 操作标志 */ 参数key是通信双方约定的消息队列关键字,它是一个非负长整数。UNIX IPC通信机构将根据它生成一个消息队列,并返回一个队列标识数ID。 队列ID与文件描述字相似,但进程只要知道该值就可以使用它,不必像文件ID那样只有通过继承才能对同一个文件操作。当指定关键字的消息队列存在时,msgget就简单地返回该队列的ID。 参数flags类似打开连创建文件的格式中第二个参数o_flags和mode的组合。 flags的低9位与文件的存取模式相似,分别说明消息队列的属主用户、同组用户和其他用户对该队列的建立和访问控制。 flags中的IPC_CREAT位(01000)如设置,可用于建立一个新的消息队列,或返回一个已存在的消息队列描述字。 如没设置,则该队列必须已存在,在这种情况下,msgget只能用于将已存在的队列的关键字映射为队列ID。 在IPC_CREAT标志和IPC_EXCL标志同时设置的情况下,如指定关键字的消息队列已存在,则出错返回(-1)。 如参数key等于IPC_PRIVATE(0),IPC机构则创建一个新的消息队列(与flags中的IPC_CREAT标志无关),并为该队列分配一个关键字,这可避免同一个已存在的队列发生冲突。 2.向消息队列发送一个消息 int msgsnd(qid,buf,nbytes,flags) int qid,nbytes,flags; struct msgbuf *buf; 参数qid是消息队列ID,nbytes是消息正文的长度,flags是发送标志。 如flags为零,当消息队列满时进程阻塞自己。如flags中IPC_NOWAIT(04000)置位,消息队列满时msgsnd返回-1,不阻塞进程。 参数buf指定一个由用户定义的消息结构,其基本格式为: struct msgtype { long mtype; char data[NBYTES]; }; 注意,发送进程对消息队列必须有写权限。 3.从消息队列接收一个消息 int msgrcv(qid,buf,nbytes,mtype,flags) int qid,nbytes,flags; long mtype; struct msgbuf *buf; msgrcv中的参数与msgsnd类似,flags中如MSG_NOERROR置位,则允许所接收的长度nbytes小于消息正文长度,而不作为出错(返回-1)处理。 buf所指的空间大小为不包括mtype的最大消息正文长度,实际接收的消息长度由msgrcv返回值指出。 mtype为0时接收消息队列中最早的消息,而不管消息的类型是什么,否则只接收指定类型的消息。 4. 消息队列控制 int msgctl(qid,cmd,sbuf) int qid, cmd; struct
您可能关注的文档
- 第二讲远程教育的基本概念与基本理论.ppt
- 第二课时元素的性质与原子结构.doc
- 第二课时反应热的测量与计算.doc
- 第二部分物质的化学变化.doc
- 第二部分项目技术与产品实现.doc
- 第五十二讲常数项级数的概念和性质.doc
- 第五单元 自然地理环境的整体性与差异性.doc
- 第五单元4~5章检测题一、选择题1、下列属于细菌的是(A、.ppt
- 第五单元经济全球化的趋势(2课时).doc
- 第五届“组织社会学实证研究工作坊”会议日程.doc
- 金融产品2024年投资策略报告:积极适应市场风格,行为金融+机器学习新发现.pdf
- 交运物流2024年度投资策略:转型十字路,峰回路又转(2023120317).pdf
- 建材行业2024年投资策略报告:板块持续磨底,重点关注需求侧复苏.pdf
- 宏观2024年投资策略报告:复苏之路.pdf
- 光储氢2024年投资策略报告:复苏在春季,需求的非线性增长曙光初现.pdf
- 公用环保2024年投资策略报告:电改持续推进,火电盈利稳定性有望进一步提升.pdf
- 房地产2024年投资策略报告:聚焦三大工程,静待需求修复.pdf
- 保险2024年投资策略报告:资产负债匹配穿越利率周期.pdf
- 政策研究2024年宏观政策与经济形势展望:共识与分歧.pdf
- 有色金属行业2024年投资策略报告:新旧需求共振&工业原料受限,构筑有色大海星辰.pdf
文档评论(0)