西安邮电大学
(计算机学院)
课内实验报告
实验名称:进程间通信
专业名称:网络工程
班级:
学生姓名:
学号(8位):
指导教师:任东陕
实验日期:2014年5月29日
一. 实验目的及实验环境
实验目的
Linux系统的进程通信机构 (IPC) 允许在任意进程间大批量地交换数据。本实验的目的
是了解和熟悉Linux支持的消息通讯机制及信息量机制。
实验环境:
Window7、Linux环境下
二. 实验内容
(1)消息的创建,发送和接收。
①使用系统调用msgget (), msgsnd (), msgrev (), 及msgctl () 编制一长度为1k的
消息的发送和接收程序。
②观察上面的程序,说明控制消息队列系统调用msgctl () 在此起什么作用?
(2)共享存储区的创建、附接和段接。
使用系统调用shmget(),shmat(),sgmdt(),shmctl(),编制一个与上述功能相同的程序。
(3)比较上述(1),(2)两种消息通信机制中数据传输的时间。
三.方案设计
(1)消息的创建,发送和接收。
①使用系统调用msgget (), msgsnd (), msgrev (), 及msgctl () 编制一长度为1k的消
息的发送和接收程序。
②观察上面的程序,说明控制消息队列系统调用msgctl () 在此起什么作用?
(2)共享存储区的创建、附接和段接。
使用系统调用shmget(),shmat(),sgmdt(),shmctl(),编制一个与上述功能相同的程序。
(3)比较上述(1),(2)两种消息通信机制中数据传输的时间。
2.共享存储区的创建,附接和断接
(1)为了便于操作和观察结果,用一个程序为“引子”,先后fork( )两个子进程,SERVER
和 CLIENT,进行通信。
(2)SERVER端建立一个KEY为75的共享区,并将第一个字节置为-1.作为数据空的标志.等
待其他进程发来的消息.当该字节的值发生变化时,表示收到了该消息,进行处理.然后再次
把它的值设为-1.如果遇到的值为0,则视为结束信号,取消该队列,并退出
SERVER.SERVER每接收到一次数据后显示”(server)received”.
(3)CLIENT端建立一个为75的共享区,当共享取得第一个字节为-1时, Server端空闲,可
发送请求. CLIENT 随即填入9到0.期间等待Server端再次空闲.进行完这些操作后,
CLIENT 退出. CLIENT每发送一次数据后显示”(client)sent”.
(4)父进程在SERVER和CLIENT均退出后结束.
四.测试数据及运行结果
(1)消息的创建,发送和接收:
正常测试及运行结果:
(2)共享存储区的创建,附接和断接
正常测试及运行结果:
五.总结
1.实验过程中遇到的问题:
对于调用的函数,看的不太懂
解决办法:
请教同学,查资料,最终得以解决
2.对设计及调试过程的心得体会。
此次试验,我明白了进程间的通信是怎么回事,当结果出来时,感觉挺神奇的,我觉得,不过是写代码还是其他,兴趣很重要,对自己兴趣的培养也很重要,以后会用心学习这门课程