分类: LINUX
2012-05-27 16:30:51
管道通信题目安排
针对管道通信,我找了三个题目,题目1和题目2是必做,题目3是选做。星期四晚上的讨论我们也主要是围绕题目1和题目2展开的,所以大家提前做好准备,每个人独立完成,如果有疑问的话,可以给新闻组发邮件或者在qq群里面进行讨论。还有,大家一定要把自己所学的知识总结到自己的技术博客里面,坚持写博客,每周的话,我会安排人检查每一个人的博客^_^
星期四晚上的讲座,如果有同学想自己来讲,可以积极地报名,具体联系郭仲杰,欢迎大家积极报名。
说明:大家在完成这些题目的时候,目标要明确,不要为了完成题目而完成题目,要在原理清楚的情况下,来完成这些题目,还要多思考。
题目1:通过管道进行的父/子进程通信
涉及主要知识点:未命名管道
题目描述:通过一个管道将数据从父进程发送到子进程,然后在子进程当中显示,实现半双工通信。
扩展:使用两个个管道进程全双工通信:父进程从管道接收数据,然后将数据显示,再给子进程发送一个数据;子进程从管道接收数据,然后将数据显示,再给父进程发送一个数据。
再扩展:……
题目2:通过管道模拟shell命令:cat file | sort
涉及主要知识点:未命名管道、重定向
题目描述:具体模拟一个shell命令:cat file | sort。具体的一些提示在后面。
提示:首先在当前目录下创建一个名为”file”的文件,里面的内容输入如下:
99
123
892
12
1342
89
32
76
通过执行”cat file | sort”后的结果如下:
12
123
1342
32
76
89
892
99
现在我们需要通过一个管道,将”cat file”的结果通过管道送给命令”sort”。其中,将”cat file”命令的输出结果重定向到”sort”命令的输入是由包含在命令中的管道标志”|”来完成的。为了在程序当中实现类似的功能,需要用dup()或者dup2()系统调用将标准输入和标准输出联系起来,具体的系统调用使用可以通过man手册来查,或者查阅群共享里面的函数手册。另外,这里的”cat file”和”sort”命令不是自己来完成,而是通过调用exec函数族来实现的,具体的exec()函数族的使用不再啰嗦。
扩展:实现两个管道
在扩展:……
*题目3:命名管道(FIFO)实现客户-服务器关系。、
题目描述:这个题目是大家根据自己的情况,结合自己的想法,实现一个客户、服务器的简单模型,这里可能会涉及到前面的未命名管道和这里的命名管道。自由发挥……