当前位置: 首页 > wzjs >正文

东莞网站建设 乐云践新网站wordpress是什么

东莞网站建设 乐云践新,网站wordpress是什么,公司官网查询,WordPress文怎么写🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 命名管道 命名管道 管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。 如果我们想在不相关的进程之间交换数据,可以使用…

Alt

🔥个人主页Quitecoder

🔥专栏linux笔记仓

Alt

目录

    • 命名管道

命名管道

管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。
如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道

命名管道的本质是一个特殊类型的文件,但它不会存储数据,只在内存中维护一个缓冲区,进行先进先出(FIFO)的数据传输

使用 mkfifo() 或 mknod() 在文件系统中创建一个特殊文件。

  • 一个进程以写的方式打开 FIFO,并向其中写入数据。
  • 另一个进程以读的方式打开 FIFO,并从中读取数据。
  • 数据是单向流动的

在这里插入图片描述
命名管道可以从命令行上创建,命令行方法是使用下面这个命令

mkfifo filename

在这里插入图片描述
p开头为管道文件

在这里插入图片描述
在这里插入图片描述
这里的读和写都是阻塞的,管道文件大小一直都是0,因为命名管道数据存储在内存中

命名管道也可以从程序里创建,相关函数:

int mkfifo(const char *filename,mode_t mode);

代码实现:首先完成管道生命周期的管理:

namedPipe.hpp文件,提供管道创建和关闭的函数:

#pragma once
#include<iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include<string>
#include<cerrno>
#include<cstdio>
#include<unistd.h>
using namespace std;
const string comm_path ="./myfifo";int CreateNamedPipe(const string & path)
{int res =mkfifo(path.c_str(),0666);if(res!=0){perror("mkfifo");}return res;
}
int RemoveNamedPipe(const string & path)
{int res =unlink(path.c_str());if(res!=0){perror("unlink");}return res;
}

server.cc:

#include"namedPipe.hpp"int main()
{CreateNamedPipe(comm_path);RemoveNamedPipe(comm_path);return 0;
}

我们这里创建了两个文件,server.cc和client.cc,一定有一个文件来完成管道的创建和删除,这里生成可执行程序就是两个毫无关系的进程

这里可以对上面方法进行封装:

class NamedPipe
{
public:NamedPipe(const string &path) : _fifo_path(path){int res = mkfifo(path.c_str(), 0666);if (res != 0){perror("mkfifo");}}~NamedPipe(){int res = unlink(_fifo_path.c_str());if (res != 0){perror("unlink");}}
private:const string _fifo_path;
};

我的主函数直接构建对象即可:

NamedPipe myfifo(comm_path);

管道会自动释放

这里继续在类里面添加其他功能

const string comm_path = "./myfifo";#define DefaultFd -1
#define Creater 1
#define User 2
#define Read O_RDONLY
#define Write O_WRONLY
class NamedPipe
{
private:bool OpenNamedPipe(int mode){_fd = open(_fifo_path.c_str(), mode);if (_fd < 0)return false;return true;}public:NamedPipe(const string &path, int who) : _fifo_path(path), _id(who), _fd(DefaultFd){if (_id == Creater){int res = mkfifo(path.c_str(), 0666);if (res != 0){perror("mkfifo");}}}bool OpenForRead(){OpenNamedPipe(Read);}bool OpenForWrite(){OpenNamedPipe(Write);}~NamedPipe(){if (_id == Creater){int res = unlink(_fifo_path.c_str());if (res != 0){perror("unlink");}}if(_fd!=DefaultFd) close(_fd);}private:const string _fifo_path;int _id;int _fd;
};

隐藏打开文件的函数操作,定义宏常量Read和Write两种打开文件方式的mode,初始化传递执行者,是创建者还是使用者来决定构建的时候是否还要再进行管道文件创造

在这里插入图片描述

int ReadNamedPipe(string * out)//输出型参数,输入型const& 输入输出型&{char buffer[BaseSize];int n = read(_fd,buffer,sizeof(buffer));if(n>0){buffer[n]=0;*out = buffer;}return n;}int WriteNamedPipe(const string & in){write(_fd,in.c_str(),in.size());}

在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/wzjs/782222.html

相关文章:

  • 怎么样免费建设网站网站建设与开发定制
  • 建设培训学校网站青海网站建设费用
  • 网站建设全包 广州实时新闻热点
  • 网站解析记录值怎么在微信做企业网站
  • 婚纱网站开发进度表酒店网站模板
  • 电商网站架构设计今天三亚最新通知
  • 网站建设营改增wordpress 分类页id
  • 用插件做网站可信网站认证有什么用
  • 外贸建站推广公司wordpress素材下载源码
  • excel如何做超链接网站超市建网站
  • 学校网站模板注意事项如何让百度抓取网站
  • 网站建设需要多久深圳平台型网站建设公司
  • 信息门户网站制作wordpress shell
  • 网站电脑基础培训班国际知名平面设计网站
  • 毕业设计网站开发实施步骤做动画合成的视频网站
  • 远程教育网站建设方案wordpress 自定义文章列表
  • 重庆seo网站设计didv WordPress
  • 制作app连接网站汕头推广平台
  • 网站推广上首页国内做的比较好的协会网站
  • 和政网站建设邢台网站制作多少钱
  • 制作网站建网站wordpress onclick
  • c网站建设为什么有的网站点不开
  • 网站续费申请郑州发布最新消息今天
  • 外贸网站分类asp网站访问量大
  • 在百度里面做个网站怎么做的做网站能力介绍
  • 唯品会官网一家做特卖的网站怎样进行网站开发
  • 郑州做网站远辰网页制作学习
  • 福州网站开发招聘重庆百度搜索优化
  • 小型网站开发语言python基础教程网易
  • 焦作 做 网站秦皇岛建设网