进程的通信

管道

什么是管道

由于进程之间是相互独立的,因此在进程与进程之间进行相互联系的时候,此时就需要采用一种机制,通过管道的方式将进程一个进程的执行数据交给另外一个进程,此时就可以以通过管道来实现

匿名管道和命名管道

匿名管道
创建一个匿名管道的方式是pipe(int pipe[2])
要创建一个匿名管道,此时两个管道之间必须有父子关系,同时匿名管道对数据的读取是基于流的方式实现的,,同时为了使得进程之间的资源能够正确访问,此时就需要采用一种机制使得进程之间的既可以正常访问资源,这样的机制就是同步机制.管道是基于父子关系的进程之间的,此时管道的生命周期就会随进程.同时管道是单向的,这就像家里自来水管中的额数一样,它只有一个方向的流动.管道读端关闭,写端还一直在写此时会触发SIGPIP信号,当写端已经不再继续写了,但是读端还在一直进行读操作,此时进程会读到0,当写入的数据小于管道规定的数据的长度的时候,此时系统会保证数据的原子写入,当写入的数据大于管道的最大规定的字节数的时候,此时就不会再进行写操作.
命名管道:
命名管道是基于mkfifo,通过mkfifo创建的管道存在于磁盘中,命名管道和匿名管道之间的区别在于两者之间的打开方式不同,命名管道是通过open来打开,但是匿名管道是通过创建就会打开

消息队列

虽然进程进通信已经有管道了,但是管道只能基于有血缘关系的进程之间进行通信,为了实现任何进程之间的通信,此时就引入了消息队列.其中消息队列时基于一个一个的数据块的,同时数据块是由类型的,数据块也是由规定的做大长度的,系统中的消息队列的长度也是有限制的,发送者在进行发送的时候此时就需要将数据的类型进行标记,接收者在进行接受的时候就可以通过这个类型来直到这个数据是否来自发送方.

共享内存

没有血缘关系的进程之间的通信虽然可以利用消息队列完成,但是在创建消息队列的时候,此时必须先将两个进程之间通过消息队列的类型来确认此时接受的消息是否正确,这样势必会造成两个进程之间的通信效率会降低,此时为了使得两个进程之间能够高效的进行通信,就提出了共享内存.共享内存是通过一段共享内存,将两个进程关联到这块内存,此时两个进程已经都关联到这块内存中,因此只要一个进程向这块内存中发送数据,此时另外一个进程就会看到这个消息,因此消息队列是块的IPC形式

信号量

信号量实际就是一个计数器,技术器中的数值代表的是当前资源的多少.

几个命令

查看消息队列:
ipcs -q
删除消息队列:
ipcrm -q
查看共享内存:
ipcs -m
删除共享内存:
ipcrm -m

进程的退出码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取网络接口信息——ioctl()函数与结构体struct ifreq、 struct ifconf

http://blog.csdn.net/windeal3203/article/details/39320605 Linux 下 可以使用ioctl()函数 以及 结构体 struct ifreq 结构体struct ifconf来获取网络接口的各种信息。 ioctl 首先看ioctl()用法ioctl()原型如下&#xff1a;#include <sys/ioctl.h>int ioctl(int fd, i…

欧拉降幂

我们记f(n)为n的欧拉函数值&#xff0c;则 当B>f©时&#xff0c;AB%CAB%f©f©%C&#xff0c;这里A,C可能不互质。 很好用&#xff0c;证明很复杂&#xff0c;等有时间回来学习一下。

房多多面试总结

测试一个ATM机 功能上 取钱     正常         要取的钱的面值是否支持ATM机服务         要取的钱的数目是否小于等于存的钱的数目         要取的钱的数目大于存钱的数目     异常         取钱的时候操作出现异常&#xff0c;导致…

BZOJ3884上帝与集合的正确用法-欧拉函数

刚开始我想的是欧拉降幂&#xff0c;可是觉得复杂度还是挺高的就去找了一下题解。 思路大方向没有问题&#xff0c;仍然是使用欧拉函数降低指数然后递归处理。但是不是简单的使用欧拉降幂而是应该对模数p稍微处理一下。因为底数已经确定为2&#xff0c;所以我们可以将p写成p2k…

比较ArrayList和数组的区别

区别1:创建时的区别 一般数组在创建的时候都需要指定数组的大小&#xff0c;但是ArrayList不需要指定数组的大小 //创建一个ArrayList对象 ArrayList<String> myList new ArrayList<String>(); //创建一个数组 String [] myList new String[2];区别2&#xff1…

linux C如何获取服务器节点上所有网口的ip地址

http://blog.csdn.net/weiyuefei/article/details/22198659 之前项目原因&#xff0c;需要获取当前服务器节点上所有网口的ip地址&#xff0c;但是当时由于时间比较紧&#xff0c;一直没搞出来&#xff0c;最近没那么忙了&#xff0c;又在网上找了一下&#xff0c;终于实现了这…

HDU1573-模线性方程

模线性方程的模板题。&#xff08;卡了一会&#xff0c;发现读入弄错了&#xff09; #include<cstdio> #include<cstring> #include<algorithm> #include<climits> #include<cmath> #include<cstdlib> #include<ctime> #include<…

java中引用传递

基本概念 栈内存 所谓的栈内存就是存储进程在运行过程中变量的内存空间 堆内存 所谓的堆内存就是存储系统中数据的内存空间 数组相关的引用传递 先来看一段代码 public class ArrayDemo {public static void main(String[] args) {int[] x null;x new int[3];System.o…

(原创)C++11改进我们的程序之右值引用

http://www.cnblogs.com/qicosmos/p/3369940.html 本次主要讲c11中的右值引用&#xff0c;后面还会讲到右值引用如何结合std::move优化我们的程序。 c11增加了一个新的类型&#xff0c;称作右值引用(R-value reference)&#xff0c;标记为T &&&#xff0c;说到右值引用…

(原创)C++11改进我们的程序之move和完美转发

http://www.cnblogs.com/qicosmos/p/3376241.html 本次要讲的是右值引用相关的几个函数&#xff1a;std::move, std::forward和成员的emplace_back&#xff0c;通过这些函数我们可以避免不必要的拷贝&#xff0c;提高程序性能。move是将对象的状态或者所有权从一个对象转移到另…

微型个人博客服务器

Http相关简介 Http是应用层的基于请求响应的一个协议, 其中Http的请求响应可以分为四部分. 请求行, 请求报头,空行, 请求正文.其中请求行包括了请求方法, url, 版本号, 请求报头包括请求属性, 冒分割的键值对, 每组属性之间都以换行的形式分开, 最后一空行作为请求的结束标识.…

HDU6428-Calculate-数论函数

并不知道为什么同样一份代码早上超时下午就A了…好像数据是随机的? 做的第一道不是简单板题的数论函数题.果然做不出来… 在网上研究了好久,才算稍微研究明白.看到了两种推导的思路.(写了半天发现讲起来好麻烦,有时间再来更新) #include<cstdio> #include<cstring&g…

[C/C++]关于C++11中的std::move和std::forward

http://blog.sina.com.cn/s/blog_53b7ddf00101p5t0.htmlstd::move是一个用于提示优化的函数&#xff0c;过去的c98中&#xff0c;由于无法将作为右值的临时变量从左值当中区别出来&#xff0c;所以程序运行时有大量临时变量白白的创建后又立刻销毁&#xff0c;其中又尤其是返回…

BZOJ3930-莫比乌斯反演+杜教筛

题目的意思很简单&#xff0c;求给定区间内的gcdk的个数&#xff0c;这应该是传统的莫比乌斯反演了。 有两种思路&#xff0c;一种是直接将里面变成gcd1&#xff0c;然后里面看作元函数用莫比乌斯函数和恒等函数展开&#xff0c;然后改变求和顺序。 还有一种是构造两个函数&…

HDU1999不可摸数-暴力打表

看到这约数和第一反应是约数和函数&#xff0c;然后仔细一看不是正经的约数和函数&#xff0c;就去推去了&#xff0c;然后推的有点小复杂。&#xff08;数论函数那部分做多了&#xff09; 然后观察也没有用到什么数论部分的特殊知识啊&#xff0c;难不成真的要暴力&#xff1f…

BZOJ2818-莫比乌斯反演/欧拉函数

这道题之前没有看数论函数的时候搞懂了,想到直接用欧拉函数做,现在再来看第一个想法就是这不是莫比乌斯反演嘛. 但还是能用简单数论知识直接做出来的还是尽量做简单一点. 两种方法想到后都写的差不多对了,都爆long long 了.万恶的long long .实在是烦.切记切记,只要是乘积,或…

epoll用法整理 实现回声服务端

http://blog.csdn.net/chenxun_2010/article/details/504934811、epoll是什么&#xff1f; epoll是当前在Linux下开发大规模并发网络程序的热门人选&#xff0c;epoll 在Linux2.6内核中正式引入&#xff0c;和select相似&#xff0c;都是I/O多路复用(IO multiplexing)技术。 Li…

HDU3430-扩展中国剩余定理

刚开始一直把题意看错了。。。体测完智商急剧下降 正确理解题意以后自己写一直wa&#xff0c;而且并不知道是哪里的问题&#xff0c;在网上看了一下其他人写的改了改自己的就过了&#xff0c;可是之前的还是不知道为什么不对。 题意大概就是有一个置换群&#xff0c;问运算多…

linux shell编程多线程和wait命令学习

http://blog.csdn.net/shuanghujushi/article/details/38186303最近在使用shell做一些部署工作&#xff0c;在使用过程中&#xff0c;效率一直不高。想提高效率&#xff0c;经过分析发现&#xff0c;并不是所有操作都是需要串行的&#xff0c;一些操作是可以进行并行操作的。经…

#ifndef的作用

#ifndef是一条预编译指令&#xff0c;就是说实在编译的时候就会运行的指令。这个指令的作用很简单&#xff0c;就是字面意思&#xff0c;如果没有定义的话&#xff0c;但是却经常使用。 因为使用这个可以避免一个源文件中两次两次包含同一个文件&#xff0c;或者一个工程文件中…