首页 > 编程知识 正文

linux进程通信的方式,进程间的通信方式三种

时间:2023-05-04 09:06:26 阅读:38933 作者:2405

进程间通信是指在不同进程之间传播和交换信息,那么不同进程之间有哪些介质可以同时访问呢? 的用户区域相互独立,一般不能相互访问。 唯一的例外是共享内存空间。 但是,很明显,内核可以提供这样的条件,因为系统空间是“公共场所”。 除此之外,是双方都可以访问的外围设备。 在这种意义上,两个进程当然也可以通过磁盘上的常规文件交换信息,或者通过注册表和其他数据库中的几个表条目和记录交换信息。 广义上也是进程间通信的手段,但一般不将其称为“进程间通信”。 因为那些通信手段的效率太低,人们对进程间通信的要求需要一定的实时性。

进程间通信主要包括管道、系统IPC (包括消息队列、信号、共享存储)和套接字。

管道包括三种:1 )普通管道PIPE,通常有限制,一种是半双工,只能单向传输; 二是只能在亲子进程之间使用。 2 )流管s_pipe:可以消除第一种限制,并双向传输。 3 )命名管:name_pipe消除了第二类限制,可以在许多不相关的进程之间通信。

系统IPC的3种方式相同,全部使用内核内的标识符进行识别。

#管道(pipe ) )是半双工通信方式,数据只能单向流动,只能在有血缘关系的过程之间使用。 进程的亲缘关系通常是指父子进程关系。

#有名管道(named pipe )有名管道也是半双工通信方式,但可以进行无血缘关系的过程之间的通信。

#信号(semophore ) :信号是用于控制多个进程对共享资源的访问的计数器。 这经常用作锁定机制,防止一个进程访问共享资源时其他进程也不访问该资源。 因此,它主要成为进程之间以及同一进程内不同线程之间的同步手段。

#消息队列(消息队列) :消息队列是消息的链表,存储在内核中,由消息队列标识符标识。 消息队列克服了消息传递信息少、只能包含管道未格式化的字节流、缓冲区大小受限等缺点。

#信号(sinal )信号是一种比较复杂的通信方式,用于通知接收进程发生了事件。

#共享内存(shared memory ) )共享内存是指映射由一个进程创建但多个进程可以访问的另一个进程可以访问的内存。 共享内存是最快的IPC方式,专门针对其他进程间通信方式的执行效率低而设计。 这往往与其他通信机制(如信号2 )协作,实现进程之间的同步和通信。

套接字(套接字)套接字) )套接字也是进程间通信机制,可用于不同进程之间的通信,这与其他通信机制不同。

常见问题解答1:管道与文件描述符、文件指针之间的关系?

:实际上管道的使用方法和文件类似,可以使用read、write、open等普通的IO函数。 管道描述符类似于文件描述符。 实际上,管道使用的描述符、文件指针和文件描述符最终被转换为系统中的套接字描述符。 它们都受到系统内核中套接字描述符的限制。 本质上,LINUX内核源代码中的管道通过天空

常见问题解答2:管路的使用方法?

:主要有以下方法: 1) pipe,创建一个管道并返回两个管道描述符。 通常用于父子进程之间的通信。 2 ) popen、pclose:的方式只返回一个管道描述符,通信对象经常为stdin or stdout; 3 ) mkpipe:命名管道,在多个过程之间进行交互。

常见问题解答3:管路与系统IPC的优劣比较?

a:管道3360的优点是支持所有UNIX实现,并在上次访问管道的过程结束后永久删除管道。 缺陷是管道只允许单向传输或在父子进程之间使用。

系统IPC:的优点是功能强大,可以在无关进程之间通信。 关键字KEY_T使用内核id,消耗内核资源,缺点是只能显式删除,不能使用select、epoll等套接字机制。

常见问题解答4: windos进程间通信与LINUX进程间通信有什么关系?

:实际上,WINDOS进程通信的大部分被移植到UNIX、WINDOS剪贴板、文件映射等上,可以从UNIX进程通信的共享存储中找到阴影。

常见问题解答5:进程间通信和线程间通信之间有什么关系?

a:windows运行的实体是线程,因此狭义的进程间通信实际上是属于不同进程的线程之间的通信。 相反,每个进程之间的线程同步问题可以使用内核支持的系统调用来维持线程之间的同步。 常用的线程同步方法包括:事件、Mutex、信号Semaphore、关键纤维素等

转载地址: http://blog.csdn.net/Yu faw/article/details/7409596

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。