- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
*文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。*exit和_exit函数都是用来终止进程的,一般情况下,0表示正常结束;其他的数值表示出现了错误,进程非正常结束。当程序执行到exit或_exit时,系统无条件的停止剩下所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。但是,这两个函数是有区别的。 exit()函数的作用是:直接使用进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构;_exit()函数则在这一基础上做了一些包装。在执行退出之前加了若干道工序。exit()函数与_exit()函数最大区别就在于exit()函数在调用exit系统之前要检查文件的打开情况,把文件缓冲区的内容写回文件。*(1)阻塞:如果其所有的子进程都还在运行(2)带子进程的终止状态正常返回:其中一个子进程终止(3)出错返回:没有子进程*管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1],其中fd[0]固定用于读管道,而fd[1]固定用于写管道,所示,这样就构成了一个半双工的通道管道关闭时只需将这两个文件描述符关闭即可,可使用普通的close()函数逐个关闭各个文件描述符*多道程序系统中存在许多进程,它们共享各种资源,然而有很多资源一次只能供一个进程使用。一次仅允许一个进程使用的资源称为临界资源现在Linux使用的进程间通信方式包括:1、管道(pipe)和有名管道(namedpipe)2、信号(signal)3、消息队列4、共享内存5、信号量6、套接字(socket)1管道通信管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入。管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据。数据被一个进程读出后,将被从管道中删除,其它读进程将不能再读到这些数据。1管道通信Linux的管道主要包括两种:无名管道(pipe)有名管道(namedpipe)管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除有管道所具有的功能外,它还允许无亲缘关系进程间的通信。无名管道(pipe)无名管道是Linux中管道通信的一种原始方法,如图所示,它具有如下特点。它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间)。它是一个半双工的通信模式,具有固定的读端和写端。管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。有名管道(namedpipe/FIFO)有名管道是对无名管道的一种改进,如图所示,它具有如下特点:它可以使互不相关的两个进程实现彼此通信。该管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当作普通文件一样进行读写操作,使用非常方便。严格地遵循先进先出规则,对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾,它们不支持如lseek()等文件定位操作。8.3.2管道1.管道的创建和读写(1)管道的创建头文件:#includeunistd.h命令格式:intpipe(int管道名[2])返回值:正确返回:0;错误返回:-1。参数说明:管道名[1]为写入端,管道名[0]为读出端。功能:创建一个管道名为指定名称的无名管道,以便于创建管道的进程及其子孙进程共享。例如,当定义了intpipe(intfp[2]);则fp[1]用于写,fp[0]用于读。(2)管道的读写读管道read(管道名[0],buf,size);写管道write(管道名[1],buf,size);参数说明:buf为程序中定义的字符型数组或缓冲区;size为读写的信息长度。注意:管道为一临界资源,因此父子进程之间除了需要读写同步以外,在对管道进行读写操作时还需要互斥进入。如果进程需要实现互斥,因为管道是文件,可以使用下述对文件上锁和开锁的系统调用: lockf(files,function,size);参数说明:files是需加以封锁的文件描述符,此处可是管道的读写端口;function是功能选择,为1表示上锁,为0表示开锁;size表示锁定或开锁的字节数,其值为0则表示文件全部内容。例8.9先创建一个管道,而后创建一个子进程。
您可能关注的文档
最近下载
- 交警大队事故处理委托书模板.docx VIP
- (高清版)DB23∕T 3915—2024 汉麻提取加工生产设施管理指南.pdf VIP
- 2024年浙江省镇海中学自主招生数学试卷及答案 .pdf VIP
- 高考化学一轮专项复习讲义-价层电子对互斥模型、杂化轨道理论及应用(含解析).pdf VIP
- 2025年3完整版_中考英语核心高频688词 【背诵版】 .pdf VIP
- 矩阵的乘法运算省名师优质课赛课获奖课件市赛课一等奖课件.pptx VIP
- 医疗机构药事管理与风险防范.pptx VIP
- 压缩天然气(CNG)安全与技术研究分析.docx VIP
- 2025年广西公需真题卷及答案.doc
- DB41∕T 2795-2024 道路运输领域危货车辆停车场(区)建设技术规范.pdf
文档评论(0)