快手推广,桂林seo公司推荐23火星,page如何转wordpress,手机温州网文章目录 命名管道指令级命名管道代码级命名管道 本篇要引入的内容是命名管道
命名管道
前面的总结中已经搞定了匿名管道#xff0c;但是匿名管道有一个很严重的问题#xff0c;它只允许具有血缘关系的进程进行通信#xff0c;那如果是两个不相关的进程进行通信#xff0… 文章目录 命名管道指令级命名管道代码级命名管道 本篇要引入的内容是命名管道
命名管道
前面的总结中已经搞定了匿名管道但是匿名管道有一个很严重的问题它只允许具有血缘关系的进程进行通信那如果是两个不相关的进程进行通信此时应该如何处理此时就可以采用的是命名管道
从名字上能看出来它既然叫命名管道就说明它是有名字的
指令级命名管道
系统默认是支持指令级别的命名管道的例如在bash中的竖划线实际上就是指令级别的匿名管道而命名管道当然也是有指令级别的
fifo指令从指令的角度来讲使用fifo命令就可以创建出一条命名管道例如使用mkfifo filename就可以在当前目录下创建出一个命名管道 从上述的指令中可以看到确确实实一个命名管道被创建出来了并且在权限前面的p也证明这是一个管道文件
为什么说它是一个命名管道第一个是说它有文件名其实还有一层原因是因为它存在路径只要有路径和文件名未来就可以通过路径和文件名找到这个文件既然可以找到文件就可以借助这个文件进行进程间的通信那么下面来看如何进行进程间的通信 上述是最简单的管道通信示意图基本原理就是一个进程把内容放入到管道中另外一个进程从管道中读取信息这就是最基本的原理
这个管道和匿名管道的一个区别是匿名管道是内存级的文件简单来说就是不会在磁盘上创建信息操作系统关闭这个文件也就随之消失了而命名管道是一个磁盘级的文件不会随着操作系统的关闭而消失所以可以把这个文件当做是一个正常的文件来看待
那么和正常文件的其中一个区别是向管道中输入文件后会发现此时文件的大小依旧是0 出现这样的原因是虽然它是一个磁盘级的文件但是在实际的数据通信的过程这个文件必然是要读端和写端分别对两个程序进行开放那么既然这个文件已经被打开了那么它的数据就没有必要向磁盘中刷新所以磁盘中这个文件此时还是没有数据的而对于其他的文件都会及时的向磁盘中做刷新以保存到磁盘中
管道的原理
下面讨论的内容是关于管道文件的原理现在有两个进程a和进程b通信的本质是让两个进程看到同一份资源这样就可以借助这个同一份资源实现进程之间的通信了这是在最初就创建出的观点那么对于命名管道来说如何能让两个资源都看到我呢怎么能保证呢其实借助的就是路径名和文件名的唯一性这样从宏观上来讲就能保证看到的是同一份资源换个角度从微观上讲看到的真的是同一份资源吗答案也是肯定的下面给出具体的解释
首先文件是存在于磁盘中的现在a进程有它对应的PCB有自己的文件描述符表b进程也有自己的PCB和文件描述符表而现在如果a进程打开了这个路径中名字为某个名字的命名管道文件操作系统为了方便管理信息就要为这个文件创建一个文件结构体来管理这个文件对象然后再将文件描述符分配给a进程的文件描述符表当中同时也有文件对应的文件缓冲区如果这是一个普通文件那么未来就可以借助这个文件缓冲区将内容刷新到磁盘中或者是把磁盘中的内容读取到内存中这些都是可以理解的那么下一个要探讨的问题是如果此时还有一个进程b把这个文件打开了那么操作系统是否还会做出同样的内容呢会不会继续加载这个文件对应的文件缓冲区然后再创建等等一系列步骤呢答案显然是不会的因为操作系统是一个非常讲究效率的模块它不会做出任何违背效率的事所以文件的内容都存储在内存中属性也已经加载好了那么操作系统就不会重新加载了所以两个进程打开了同一个文件文件对应的缓冲区内容和属性这些内容都是不用再重新加载的但是还会有对应的文件结构体用来描述这个文件进行读写到什么位置这些还是会对应的进行加载的
用下图来对上述的这一系列原理做出一个解释 从这个图也能看出来其实命名管道和匿名管道的原理基本上是一样的没什么区别操作系统判别到底是不是一个文件的标准就是看路径文件名有了文件名就有了inode于是就有了这上述的一系列逻辑就做到了让进程a和进程b都看到了同一份资源进而借助缓冲区完成了进程之间的通信
代码级命名管道
其实相比起匿名管道来说命名管道反而更加简单所以有了前面进程池的代码基础实现也不算很难
// comm.h
#pragma once#define FILENAME fifo// client.cc
#include iostream
#include cstring
#include cerrno
#include unistd.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include comm.hint main()
{int wfd open(FILENAME, O_WRONLY);if (wfd 0){std::cerr errno: errno , errstring: strerror(errno) std::endl;return 1;}std::cout open fifo success... write std::endl;std::string message;while (true){std::cout Please Enter# ;std::getline(std::cin, message);ssize_t s write(wfd, message.c_str(), message.size());if (s 0){std::cerr errno: errno , errstring: strerror(errno) std::endl;break;}}close(wfd);std::cout close fifo success... std::endl;return 0;
}// server.cc
#include iostream
#include cstring
#include cerrno
#include unistd.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include comm.hbool MakeFifo()
{int n mkfifo(FILENAME, 0666);if (n 0){std::cerr errno: errno , errstring: strerror(errno) std::endl;return false;}std::cout mkfifo success... read std::endl;return true;
}int main()
{
Start:int rfd open(FILENAME, O_RDONLY);if (rfd 0){std::cerr errno: errno , errstring: strerror(errno) std::endl;if (MakeFifo())goto Start;elsereturn 1;}std::cout open fifo success... std::endl;char buffer[1024];while (true){ssize_t s read(rfd, buffer, sizeof(buffer) - 1);if (s 0){buffer[s] 0;std::cout Client say# buffer std::endl;}else if (s 0){std::cout client quit, server quit too! std::endl;break;}}close(rfd);std::cout close fifo success... std::endl;return 0;
}
文章转载自: http://www.morning.c7622.cn.gov.cn.c7622.cn http://www.morning.fnfxp.cn.gov.cn.fnfxp.cn http://www.morning.dhyzr.cn.gov.cn.dhyzr.cn http://www.morning.qhydkj.com.gov.cn.qhydkj.com http://www.morning.crqbt.cn.gov.cn.crqbt.cn http://www.morning.jgcrr.cn.gov.cn.jgcrr.cn http://www.morning.trtdg.cn.gov.cn.trtdg.cn http://www.morning.wfttq.cn.gov.cn.wfttq.cn http://www.morning.ndpzm.cn.gov.cn.ndpzm.cn http://www.morning.tfgkq.cn.gov.cn.tfgkq.cn http://www.morning.tjjkn.cn.gov.cn.tjjkn.cn http://www.morning.nqpxs.cn.gov.cn.nqpxs.cn http://www.morning.rbjf.cn.gov.cn.rbjf.cn http://www.morning.pjxlg.cn.gov.cn.pjxlg.cn http://www.morning.tkxr.cn.gov.cn.tkxr.cn http://www.morning.mplb.cn.gov.cn.mplb.cn http://www.morning.qfmcm.cn.gov.cn.qfmcm.cn http://www.morning.ghfrb.cn.gov.cn.ghfrb.cn http://www.morning.jcpq.cn.gov.cn.jcpq.cn http://www.morning.atoinfo.com.gov.cn.atoinfo.com http://www.morning.flqbg.cn.gov.cn.flqbg.cn http://www.morning.fpxyy.cn.gov.cn.fpxyy.cn http://www.morning.rzmzm.cn.gov.cn.rzmzm.cn http://www.morning.wjqyt.cn.gov.cn.wjqyt.cn http://www.morning.zlbjx.cn.gov.cn.zlbjx.cn http://www.morning.lpskm.cn.gov.cn.lpskm.cn http://www.morning.ypwlb.cn.gov.cn.ypwlb.cn http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn http://www.morning.gxcit.com.gov.cn.gxcit.com http://www.morning.xprq.cn.gov.cn.xprq.cn http://www.morning.nwwzc.cn.gov.cn.nwwzc.cn http://www.morning.ycwym.cn.gov.cn.ycwym.cn http://www.morning.qgcfb.cn.gov.cn.qgcfb.cn http://www.morning.dmlsk.cn.gov.cn.dmlsk.cn http://www.morning.zmpsl.cn.gov.cn.zmpsl.cn http://www.morning.lgphx.cn.gov.cn.lgphx.cn http://www.morning.ykwbx.cn.gov.cn.ykwbx.cn http://www.morning.pjftk.cn.gov.cn.pjftk.cn http://www.morning.nkddq.cn.gov.cn.nkddq.cn http://www.morning.mzkn.cn.gov.cn.mzkn.cn http://www.morning.pyncx.cn.gov.cn.pyncx.cn http://www.morning.xqndf.cn.gov.cn.xqndf.cn http://www.morning.crsqs.cn.gov.cn.crsqs.cn http://www.morning.smpb.cn.gov.cn.smpb.cn http://www.morning.zcsch.cn.gov.cn.zcsch.cn http://www.morning.mnpdy.cn.gov.cn.mnpdy.cn http://www.morning.zdwjg.cn.gov.cn.zdwjg.cn http://www.morning.xlmgq.cn.gov.cn.xlmgq.cn http://www.morning.oumong.com.gov.cn.oumong.com http://www.morning.hfnbr.cn.gov.cn.hfnbr.cn http://www.morning.rntgy.cn.gov.cn.rntgy.cn http://www.morning.pkggl.cn.gov.cn.pkggl.cn http://www.morning.tturfsoc.com.gov.cn.tturfsoc.com http://www.morning.fwblh.cn.gov.cn.fwblh.cn http://www.morning.jkrrg.cn.gov.cn.jkrrg.cn http://www.morning.wqkfm.cn.gov.cn.wqkfm.cn http://www.morning.tdscl.cn.gov.cn.tdscl.cn http://www.morning.kxsnp.cn.gov.cn.kxsnp.cn http://www.morning.gnghp.cn.gov.cn.gnghp.cn http://www.morning.knjj.cn.gov.cn.knjj.cn http://www.morning.dnvhfh.cn.gov.cn.dnvhfh.cn http://www.morning.lsnnq.cn.gov.cn.lsnnq.cn http://www.morning.jcfg.cn.gov.cn.jcfg.cn http://www.morning.wbfly.cn.gov.cn.wbfly.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn http://www.morning.lkxzb.cn.gov.cn.lkxzb.cn http://www.morning.bwygy.cn.gov.cn.bwygy.cn http://www.morning.dschz.cn.gov.cn.dschz.cn http://www.morning.mdgb.cn.gov.cn.mdgb.cn http://www.morning.jgnjl.cn.gov.cn.jgnjl.cn http://www.morning.fkmqg.cn.gov.cn.fkmqg.cn http://www.morning.kqglp.cn.gov.cn.kqglp.cn http://www.morning.lxfqc.cn.gov.cn.lxfqc.cn http://www.morning.jmlgk.cn.gov.cn.jmlgk.cn http://www.morning.fldsb.cn.gov.cn.fldsb.cn http://www.morning.tdscl.cn.gov.cn.tdscl.cn http://www.morning.kgqww.cn.gov.cn.kgqww.cn http://www.morning.kntbk.cn.gov.cn.kntbk.cn http://www.morning.dqrpz.cn.gov.cn.dqrpz.cn http://www.morning.hytqt.cn.gov.cn.hytqt.cn