网站大量收购独家精品文档,联系QQ:2885784924

进程间通信Linux中管道的创建和读写pipeLinux中命名.pptVIP

进程间通信Linux中管道的创建和读写pipeLinux中命名.ppt

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程间通信Linux中管道的创建和读写pipeLinux中命名

实验1 - 管道通信实验 (1) 1.实验目的 通过编写命名管道多路通信,学生可进一步掌握管道的创建、读写等操作,同时,也复习使用select()函数实现管道的通信。 2.实验内容 通过mknod命令创建两个命名管道。 实验1 - 管道通信实验(2) 实验2 - 共享内存实验(1) 1.实验目的 通过编写共享内存,进一步了解使用共享内存的具体步骤,同时也进一步加深对共享内存的理解。在本实验中,采用信号量作为同步机制完善两个进程之间的通信。 2.实验内容 该实现要求利用共享内存实现文件的打开和读写操作。 实验2 - 共享内存实验(2) 信号概述(3) 用户进程对信号的响应可以有3种方式。 ? 忽略信号,即对信号不做任何处理,但是有两个信号不能忽略,即SIGKILL及SIGSTOP。 ? 捕捉信号,定义信号处理函数,当信号发生时,执行相应的自定义处理函数。 执行缺省操作,Linux对每种信号都规定了默认操作。 信号概述(3) 信号发送与捕捉(1) kill()函数同读者熟知的kill系统命令一样,可以发送信号给进程或进程组(实际上,kill系统命令只是kill()函数的一个用户接口)。这里需要注意的是,它不仅可以中止进程(实际上发出SIGKILL信号),也可以向进程发送其他信号。 与kill()函数所不同的是,raise()函数允许进程向自身发送信号。 信号发送与捕捉(2) 信号发送与捕捉(3) alarm()也称为闹钟函数,它可以在进程中设置一个定时器,当定时器指定的时间到时,它就向进程发送SIGALARM信号。要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm()之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。 pause()函数是用于将调用进程挂起直至捕捉到信号为止。这个函数很常用,通常可以用于判断信号是否已到。 信号发送与捕捉(4) signal() (1) 信号处理的主要方法有两种,一种是使用简单的signal()函数,另一种是使用信号集函数组。 signal() (2) struct sigaction { void (*sa_handler)(int signo); sigset_t sa_mask; int sa_flags; void (*sa_restore)(void); } sa_handler是一个函数指针,指定信号处理函数,这里除可以是用户自定义的处理函数外,还可以为SIG_DFL(采用缺省的处理方式)或SIG_IGN(忽略信号)。它的处理函数只有一个参数,即信号值。 sa_mask是一个信号集,它可以指定在信号处理程序执行过程中哪些信号应当被屏蔽,在调用信号捕获函数之前,该信号集要加入到信号的信号屏蔽字中。 sa_flags中包含了许多标志位,是对信号进行处理的各个选择项。 信号集函数组 (1) 使用信号集函数组处理信号时涉及一系列的函数,这些函数按照调用的先后次序可分为以下几大功能模块:创建信号集合、注册信号处理函数以及检测信号。 其中,创建信号集合主要用于处理用户感兴趣的一些信号,其函数包括以下几个。 ? sigemptyset():将信号集合初始化为空。 ? sigfillset():将信号集合初始化为包含所有已定义的信号的集合。 ? sigaddset():将指定信号加入到信号集合中去。 ? sigdelset():将指定信号从信号集合中删去。 ? sigismember():查询指定信号是否在信号集合之中。 信号集函数组 (2) 注册信号处理函数主要用于决定进程如何处理信号。这里要注意的是,信号集里的信号并不是真正可以处理的信号,只有当信号的状态处于非阻塞状态时才会真正起作用。 因此,首先使用sigprocmask()函数检测并更改信号屏蔽字(信号屏蔽字是用来指定当前被阻塞的一组信号,它们不会被进程接收),然后使用sigaction()函数来定义进程接收到特定信号之后的行为。 检测信号是信号处理的后续步骤,因为被阻塞的信号不会传递给进程,所以这些信号就处于“未处理”状态(也就是进程不清楚它的存在)。 sigpending()函数允许进程检测“未处理”信号,并进一步决定对它们作何处理。 信号集函数组 (3) 信号集函数组 (4) 4 信号量 信号量概述(1) 在多任务操作系统环境下,多个进程会同时运行,并且一些进程之间可能存在一定的关联。 多个进程可能为了完成同一个任务会相互协作,这样形成进程之间的同步关系。而且在不同进程之间,为了争夺有限的系统资源(硬件或软件资源)会进入竞争状态,这就是进程之间的互斥关系。 进程之间的互斥与同步关系存在的根源在于临界资源。临界资源是在同一个时刻只允许有限个(通常只

文档评论(0)

118books + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档