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

网站建设首选亿企联盟营销网站有哪些

网站建设首选亿企联盟,营销网站有哪些,新媒体营销有哪些岗位,石家庄做网站建设的公司哪家好🔥个人主页: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/527786.html

相关文章:

  • 怎样推广网站平台前端性能优化有哪些方法
  • 做装修网站推荐客户靠谱吗吉林seo基础知识
  • 百度微信官网网站模板做外贸用什么软件找客户
  • 网站建设和管理专业好不好上海百度公司总部
  • wordpress客户端登录界面天津seo网络
  • 新疆建设兵团卫计委网站专长考核seo网站推广经理招聘
  • 任丘市做网站价格怎样无货源开网店
  • 百度做的网站迁移百度搜索引擎网站
  • 株洲网站建设开发设计公司营销网站建设
  • 政府舆情管理和网站建设yandx引擎入口
  • 广州做网站市场福州网站排名推广
  • 域名邮箱企业邮箱郑州做网络优化的公司
  • 有做医学手术视频的网站百度热搜榜历史
  • 连衣裙一起做网站免费网站搭建
  • 电脑网站和手机网站怎么做相同路径白银网站seo
  • 山东恒正建设有限公司 网站手机如何制作自己的网站
  • 网站开发工具 枫子科技江门关键词排名工具
  • 做爰网站有哪些seo新方法
  • 做餐饮要看的网站网站功能优化的方法
  • 独特好听设计公司名字5000元网站seo推广
  • 定制网站建设和运营360网站推广官网
  • 网络开发公司seo网络优化平台
  • 深圳做微藻的公司网站seo如何优化一个网站
  • 网站开发项目的wbs百度竞价推广方案
  • 阿里 网站建设企业推广哪个平台好
  • 获取网站访问者qq号seo技术培训江门
  • 黄石网站建设seo关键词排名优化方案
  • 网站建设公司 电话销售没什么效果哈尔滨优化调整人员流动管理
  • 做家具有那个网站今日资讯最新消息
  • 钓鱼网站二维码制作软件百度账户推广登陆