-
实验目的
1. 对理论课中学习的进程,程序等的概念做进一步地理解,明确进程和程序的区别;
2. 加深理解进程并发执行的概念,认识多进程并发执行的实质;
3. 观察进程争夺用资源的现象,分析其过程和原因,学习解决进程互斥的方法;
4. 了解Linux系统中多进程之间通过管道通信的基本原理和应用方法。
-
实验原理
进程间可以通过管道相互传送消息,我们可以把 管道看作是一块空间,进程可以经由两个不同的文 件描述字(文件描述字是Linux用来识别文件的, 所有已打开的文件,都有系统分配的唯一文件描述 字)来分享这块空间。存取这块空间的文件描述字 可经下面的pipe()系统调用取得,由于返回的是两 个文件描述字,因此用数组来表示
-
实验所用函数
fork():产生一个新的子进程
getpid():取得目前进程的进程识别码
exit():正常终结目前进程的执行
sleep():睡眠time秒
wait():暂停目前进程的执行
pipe() :会建立管道
lockf() :用于对一个已经打开的文件,施加、检测和移除 POSIX 标准的软锁
read():会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。
write():会把参数buf所指的内存写入count个字节到参数fd所指的文件内。
perror(): 用来将上一个函数发生错误的原因输出的标准错误(stderr)。
Strcpy(): 是依据 /0 作为结束判断的,如果 to 的空间不够,则会引起 buffer overflow。
-
实验代码
-
程序运行结果截图
调试过程:
-
实验遇到问题及解决处理方法
在实验中忘了怎么运行程序了,通过上网查找资料解决了问题
通过实现进程间的管道通信,理解了进程间如何通过特定的数据结构进行信息交换。
实验心得:
学习了pipe(), read(), write()等系统调用的使用,加深了对进程通信机制的认识。
实验提高了解决实际编程问题的能力,增强了自主学习和问题解决的自信。