让中国的不锈钢管名扬世界

实标厚度-把诚信刻在脸上

全国免费加盟热线:

0317-6189005 13831740001
当前位置:主页 > RTG电子动态 > 公司新闻 >

RTG电子网址Linux进程间通信——使用命名管道

文章出处:未知 人气:发表时间:2021-10-20

  中我们看到了怎样利用匿名管道来在历程之间通报数据同时也看到了这个方法的一个缺点就是这些历程都由一个配合的先人历程启动这给我们在不相干的的历程之间交流数据带来了未便利。这里将会引见历程的另外一种通讯方法——定名管道来处理不相干历程间的通讯成绩。

  1、甚么是定名管道定名管道也被称为FIFO文件它是一种特别范例的文件它在文件体系中以文件名的情势存在可是它的举动却和之前所讲的没著名字的管道匿名管道相似。

  因为Linux中一切的事物都可被视为文件以是对定名管道的利用也就变得与文件操纵十分的同一也使它的利用十分便利同时我们也能够像平居的文件名一样在号令中利用。

  1、翻开FIFO文件与翻开其他文件一样FIFO文件也能够利用open挪用来翻开。留意mkfifo函数只是创立一个FIFO文件要利用定名管道仍是将其翻开。

  可是有两点要留意1、就是法式不克不及以O_RDWR形式翻开FIFO文件停止读写操纵而其举动也未明肯定义由于如一个管道以读/写方法翻开历程就会读回本人的输出同时我们凡是利用FIFO只是为了单向的数据通报。2、就是通报给open挪用的是FIFO的途径名而不是一般的文件。

  4、利用FIFO完成历程间的通讯说了这么多上面就用一个例子法式来阐明一下两个历程怎样经由过程FIFO完成通讯吧。这里有两个源文件一个fifowrite.c它在需求时创立管道然后向管道写入数据,数据由文件Data.txt供给巨细为10M内容满是字符‘0’。另外一个源文件为fiforead.c它从FIFO中读取数据并把读到的数据保留到另外一个文件DataFormFIFO.txt中。RTG电子为了让法式愈加简约疏忽了有些函数挪用能否胜利的查抄。

  5、定名管道的宁静成绩前面的例子是两个历程之间的通讯成绩也就是说一个历程向FIFO文件写数据而另外一个历程则在FIFO文件中读取数据。试想如许一个成绩只利用一个FIFO文件假如有多个历程同时向统一个FIFO文件写数据而只要一个读FIFO历程在统一个FIFO文件中读取数据时会发作怎样的状况呢会发作数据块的互相交织是很一般的并且小我私家以为多个差别历程向一个FIFO读历程发送数据是很一般的状况。

  为理解决这一成绩就是让写操纵的原子化。如何才气使写操纵原子化呢谜底很简朴体系划定在一个以O_WRONLY即壅闭方法翻开的FIFO中 假如写入的数据长度小于等候PIPE_BUF那末大概写入局部字节大概一个字节都不写入。假如一切的写恳求都是发往一个壅闭的FIFO的而且每一个写记恳求的数据长度小于即是PIPE_BUF字节体系就可以够确保数据决不会交织在一同。

  6、定名管道与匿名管道的比照利用匿名管道则通讯的历程之间需求一个父子干系通讯的两个历程必然是由一个配合的先人历程启动。可是匿名管道没有上面说到的数据穿插的成绩。

  与利用匿名管道比拟我们能够看到fifowrite.exe和fiforead.exe这两个历程是没有甚么一定的联络的假如硬要说他们具有某种联络就只能说是它们城市见统一个FIFO文件。它处理了之前在匿名管道中呈现的通讯的两个历程必然是由一个配合的先人历程启动的成绩。可是为了数据的宁静我们许多时分要接纳壅闭的FIFO让写操纵酿成原子操纵。

  wnwnwnwn:4、ClassTest ct4(ct1);这条语句为间接初始化,由于ct1原来曾经存在,间接挪用复制机关函数,天生工具ct3的副本工具ct4。以是当复制机关函数变成私偶然,该语句不克不及编译经由过程。 这句话是有成绩呢?我的了解是: 4、ClassTest ct4(ct1);这条语句为复制初始化,由于ct1原来曾经存在,不需求创立ct1,间接挪用复制机关函数,天生工具ct1的副本工具ct4。以是当复制机关函数变成私偶然,该语句不克不及编译经由过程。

同类文章排行

最新资讯文章

返回顶部