Linux系统编程实验六:进程间通信
- 格式:doc
- 大小:177.72 KB
- 文档页数:10


1. IPC(Interprocess Communication)简介 (1)2. 信号通信signal (2)3. 标准流管道 (3)4. 无名管道(PIPE) (4)5. 命名管道(FIFO) (6)5.1.创建、删除FIFO文件 (6)5.2.打开、关闭FIFO文件 (7)5.3.读写FIFO (7)6. 共享内存 (8)7. 消息队列 (16)8. 信号量 (19)1.IPC(Interprocess Communication)简介Linux下的进程通信手段基本上是从UNIX平台上的进程通信手段继承而来的。
而对UNIX发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间的通信方面的侧重点有所不同。
前者是对UNIX早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,其通信进程主要局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。
而Linux则把两者的优势都继承了下来UNIX进程间通信(IPC)方式包括管道、FIFO以及信号。
System V进程间通信(IPC)包括System V消息队列、System V信号量以及System V共享内存区。
Posix 进程间通信(IPC)包括Posix消息队列、Posix信号量以及Posix共享内存区。
linux进程之间的通讯主要有下面几种:1 管道pipe和命名管道:管道有亲缘关系进程间的通信,命名管道还允许无亲缘关系进程间通信2 信号signal:在软件层模拟中断机制,通知进程某事发生3 消息队列:消息的链表包括posix消息队列和SystemV消息队列4 共享内存:多个进程访问一块内存主要以同步5 信号量:进程间同步6 套接字socket:不同机器间进程通信下面是对它们的详解:·管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
linux系统进程间通信的方式
Linux系统进程间通信的方式有多种,其中比较常见的有管道、消息队列、信号量、共享内存和套接字等。
1. 管道:管道是一种半双工的通信方式,其本质是一块内存缓冲区。
它分为匿名管道和命名管道,匿名管道只能用于父子进程之间的通信,而命名管道则可以用于任意两个进程之间的通信。
2. 消息队列:消息队列是一种通过内核实现的进程间通信机制,其可以实现多对多的进程通信。
消息队列可以设置消息的优先级和大小,发送方通过消息队列发送消息,接收方则通过读取消息队列的方式获取消息。
3. 信号量:信号量是一种用于同步多进程共享资源的机制。
它可以用来解决多个进程同时访问共享资源时所产生的竞争问题。
通过信号量机制,进程可以申请资源、释放资源以及等待资源。
4. 共享内存:共享内存是一种高效的进程间通信方式,它允许多个进程共享同一块物理内存空间。
多个进程可以直接访问这块内存,从而实现进程间数据的快速传递。
5. 套接字:套接字是一种跨网络的进程间通信方式,它可以实现不同主机上的进程之间的通信。
套接字可以用于实现客户端和服务器的通信,也可以用于实现进程之间的通信。
总的来说,不同的进程间通信方式有不同的应用场景,开发者需要根据实际的需求选择合适的进程间通信方式。
- 1 -。
进程间通信在Linux系统中,以进程为单位分配和管理资源。
由于保护的缘故,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭。
但在一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项任务,因此要求进程之间必须能够互相通信,从而来共享资源和信息。
所以,一个操作系统内核必须提供进程间的通信机制(IPC)。
进程间通信有如下一些目的:数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。
共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。
通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
资源共享:多个进程之间共享同样的资源。
为了作到这一点,需要内核提供锁和同步机制。
进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
进程通过与内核及其它进程之间的互相通信来协调它们的行为。
Linux支持多种进程间通信(IPC)机制,信号和管道是其中的两种。
除此之外,Linux还支持System V 的IPC 机制(用首次出现的Unix版本命名)。
5.1 信号(Signals)信号(Signals )是Unix系统中使用的最古老的进程间通信的方法之一。
操作系统通过信号来通知进程系统中发生了某种预先规定好的事件(一组事件中的一个),它也是用户进程之间通信和同步的一种原始机制。
一个键盘中断或者一个错误条件(比如进程试图访问它的虚拟内存中不存在的位置等)都有可能产生一个信号。
Shell也使用信号向它的子进程发送作业控制信号。
信号是在Unix System V中首先引入的,它实现了15种信号,但很不可靠。
BSD4.2解决了其中的许多问题,而在BSD4.3中进一步加强和改善了信号机制。
但两者的接口不完全兼容。