问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux进程间通讯的几种方式

发布网友 发布时间:2022-04-24 00:24

我来回答

2个回答

热心网友 时间:2022-04-11 21:39

  一。管道(pipe)
  管道是Linux支持的最初IPC方式,管道可分为无名管道,有名管道等。
  (一)无名管道,它具有几个特点:
  1) 管道是半双工的,只能支持数据的单向流动;两进程间需要通信时需要建立起两个管道;
  2) 无名管道使用pipe()函数创建,只能用于父子进程或者兄弟进程之间;
  3) 管道对于通信的两端进程而言,实质上是一种独立的文件,只存在于内存中;
  4) 数据的读写操作:一个进程向管道中写数据,所写的数据添加在管道缓冲区的尾部;另一个进程在管道中缓冲区的头部读数据。
  (二)有名管道
  有名管道也是半双工的,不过它允许没有亲缘关系的进程间进行通信。具体点说就是,有名管道提供了一个路径名与之进行关联,以FIFO(先进先出)的形式存在于文件系统中。这样即使是不相干的进程也可以通过FIFO相互通信,只要他们能访问已经提供的路径。
  值得注意的是,只有在管道有读端时,往管道中写数据才有意义。否则,向管道写数据的进程会接收到内核发出来的SIGPIPE信号;应用程序可以自定义该信号处理函数,或者直接忽略该信号。
  二。信号量(semophore)
  信号量是一种计数器,可以控制进程间多个线程或者多个进程对资源的同步访问,它常实现为一种锁机制。实质上,信号量是一个被保护的变量,并且只能通过初始化和两个标准的原子操作(P/V)来访问。(P,V操作也常称为wait(s),signal(s))
  三。信号(Signal)
  信号是Unix系统中使用的最古老的进程间通信的方法之一。操作系统通过信号来通知某一进程发生了某一种预定好的事件;接收到信号的进程可以选择不同的方式处理该信号,一是可以采用默认处理机制—进程中断或退出,一是忽略该信号,还有就是自定义该信号的处理函数,执行相应的动作。
  内核为进程生产信号,来响应不同的事件,这些事件就是信号源。信号源可以是:异常,其他进程,终端的中断(Ctrl-C,Ctrl+\等),作业的控制(前台,后台进程的管理等),分配额问题(cpu超时或文件过大等),内核通知(例如I/O就绪等),报警(计时器)。
  四。消息队列(Message Queue)
  消息队列就是消息的一个链表,它允许一个或者多个进程向它写消息,一个或多个进程向它读消息。Linux维护了一个消息队列向量表:msgque,来表示系统中所有的消息队列。
  消息队列克服了信号传递信息少,管道只能支持无格式字节流和缓冲区受限的缺点。
  五。共享内存(shared memory)
  共享内存映射为一段可以被其他进程访问的内存。该共享内存由一个进程所创建,然后其他进程可以挂载到该共享内存中。共享内存是最快的IPC机制,但由于linux本身不能实现对其同步控制,需要用户程序进行并发访问控制,因此它一般结合了其他通信机制实现了进程间的通信,例如信号量。
  socket也是一种进程间的通信机制,不过它与其他通信方式主要的区别是:它可以实现不同主机间的进程通信。

热心网友 时间:2022-04-11 22:57

进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有它自己的优点和局限性,一般,对于单个程序而言使用所有的IPC方法是不常见的。
1、无名管道通信
无名管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用,进程的亲缘关系通常是指父子进程关系。
2、高级管道通信
高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们称为高级管道方式。
3、有名管道通信
有名管道(named pipe):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
4、消息队列通信
消息队列(message
queue):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
5、信号量通信
信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问,它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
6、信号
信号(sinal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
7、共享内存通信
共享内存(shared
memory):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
8、套接字通信
套接字(socket):套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“定是李八百”的出处是哪里 李八百六种说法 李仙指道教传说中仙人 李八百 学习劈叉,每次静压压腿多久 六哥救的叫花子是谁的孩子 大智慧江恩三日图源码,找了无数公式,想在大智慧里用 ,一直没找到_百度... 测试类工具有哪些 服务器压力测试需要用的8种工具 8岁的小孩能玩什么游戏8岁男童和父母玩些什么互动游戏 摩尔庄园手游冲浪板凯文在哪里现在摩尔庄园凯文在哪 鸡脚怎么做好吃易做 老水鸡脚做法 脚汤的做法,玉米胡萝卜鸡脚汤怎么做好吃 鸡脚怎煲有营养 鸡脚可以和萝卜煲汤吗'? 炖红萝卜汤的做法,鸡脚炖红萝卜汤怎么做好 鸡脚怎么做法才好吃? 炖萝卜凤爪汤怎么做好吃呢? 泡鸡爪跟萝卜的做法 鸡脚煲酸萝卜汤怎么做 红萝卜玉米鸡脚汤的做法有哪些? 自制鸡脚的做法大全 胡萝卜烧鸡脚怎么做 红萝卜鸡脚汤的做法,红萝卜鸡脚汤怎么做好吃 怎么给word文件设置密码?如何修改word文档密码 怎样给word文档设密? 宝洁公司旗下产品? 美国宝洁公司旗下的产品有哪些? 宝洁公司旗下一线品牌化妆品? 海蜇皮怎么样保存? linux进程间通信的方式有哪些 linux 进程通信 linux系统下进程通信的6种方式分别是什么?它们的区别在什么地方?线程通信有几种方式?这是很多人的疑问 总结:linux进程间通信的几种机制的比较及适 在LINUX下,如何实现进程间的通信?如何实现进程间的连接? linux系统中哪些可以用于进程间的通信消息队列临界区信号量socket cad剖面图怎么画- 问一问 linux下c的两个进程如何实现通信?一个进程给另一个进程发送消息,另一个接受并显示出来。求大神啊 linux 进程间通讯的方式有哪些 CAD怎么画刨面线怎么设置 刚买了个16gU盘 可实际点属性看只有14.9g,正常吗? U盘都是虚假存储空间,怎么恢复本来的容量? 京东买了个128G的U盘,但是容量缩水不够? cad剖面线怎么画 为什么新买的U盘容量显示达不到? 在CAD中怎么样画剖面图?具体步骤。。。 买了个新U盘128G的,插电脑上一看才115GB这是正常的? 如何绘制CAD三维的剖面线? 新买的u盘可用容量大于容量?怎么回事 u盘容量作假怎么识别