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

做个网站商场需要多少自已买域名做网站要多少钱

做个网站商场需要多少,自已买域名做网站要多少钱,广州网站建设公司兴田德润可以不,wordpress 分页目录 3、解决遗留BUG -- 边关闭信道边回收进程 1#xff09;解决方案 2#xff09;两种方法相比较 4、命名管道 1#xff09;理解命名管道 2#xff09;创建命名管道 a. 命令行指令 b. 系统调用方法 3#xff09;代码实现命名管道 构建类进行封装命名管道#…目录 3、解决遗留BUG -- 边关闭信道边回收进程 1解决方案 2两种方法相比较 4、命名管道 1理解命名管道 2创建命名管道 a. 命令行指令 b. 系统调用方法 3代码实现命名管道 构建类进行封装命名管道 构造和析构 读取管道、写入管道 server.cc 读端 client.cc写端 效果 4疑点解决 写端未来读端open调用阻塞 读端关闭写端继续写入 5完整代码 namedPipe.hpp: server.cc: client.cc: 3、解决遗留BUG -- 边关闭信道边回收进程 1解决方案 我们仍然想用上述方法进行管道和子进程的回收 -- 则需要解决子进程所继承的父进程遗留的多余wfd我们在每次创建子进程时遍历所有之前的信道关闭掉wfd即可就不会出现多个wfd指向一个管道 2两种方法相比较 退一个回收一个 先全部退出再进行等待回收 4、命名管道 1理解命名管道 命名该管道有名字因为该文件有路径有路径必有文件名 管道依旧是一个内存级的基于文件进行通信的通信方案 属性、操作、文件内核缓冲区同一个文件的都是差不多的因此不用再创建一份操作系统不做浪费时间和空间的事情 我们怎么保证两个毫不相关的进程打开了同一个文件呢 每一个文件都有文件路径(唯一性) 2创建命名管道 a. 命令行指令 一个进程echo向命名管道里面输入数据 一个进程cat向命名管道里面读取数据 这样就实现了两个毫不相关的进行之间的通信 创建了三个窗口一个一直向管道输入一个一直读取一个手动检测管道大小 但是我们可以看到管道文件myfifo的大小一直显示0 因为 FIFO0 文件虽存在于文件系统中但其内容都存放在内存里不会将通信数据刷新到磁盘中所以在磁盘上显示的文件大小始终为0 b. 系统调用方法 使用mkfifo即可创建管道文件 使用unlink即可删除一个管道文件当然rm也可以删除 3代码实现命名管道 创建两个.cc文件分别模拟两个进程一个进行发送一个进行读取 通过一个CreateNamedPipe和一个RemoveNamedPipe就可以实现对管道生命周期的管理 当然我们管理管道的声明周期时肯定是将创建和删除交给同一个文件去做比较好因为它清楚什么时候去删除合适 这里我们让发送的那方去管理管道的生命周期 构建类进行封装命名管道 我们需要创建管道的路径共同路径、创建管道的身份、管道的文件描述符 class NamedPipe { private:const std::string _fifo_path;int _id;int _fd; }; 构造和析构 class NamedPipe { public:NamedPipe(const std::string path, int who): _fifo_path(path), _id(who), _fd(DefaultFd){if (_id Creater){int res mkfifo(_fifo_path.c_str(), 0666);if (res ! 0){perror(mkfifo);}std::cout creater create named pipe std::endl;}}~NamedPipe(){sleep(5);if (_id Creater){int res unlink(_fifo_path.c_str());if (res ! 0){perror(unlink);}std::cout creater remove named pipe std::endl;}if(_fd ! DefaultFd) close(_fd);}private:const std::string _fifo_path;int _id;int _fd; }; 读取管道、写入管道 class NamedPipe { private:bool OpenNamedPipe(int mode){_fd open(_fifo_path.c_str(), mode);if(_fd 0) return false;return true;}public:NamedPipe(const std::string path, int who): _fifo_path(path), _id(who), _fd(DefaultFd){if (_id Creater){int res mkfifo(_fifo_path.c_str(), 0666);if (res ! 0){perror(mkfifo);}std::cout creater create named pipe std::endl;}}bool OpenForRead(){return OpenNamedPipe(Read);}bool OpenForWrite(){return OpenNamedPipe(Write);}int ReadNamedPipe(std::string *out){char buffer[BaseSize];int n read(_fd, buffer, sizeof(buffer));if(n 0){buffer[n] 0; // \0*out buffer;}return n;}int WriteNamedPipe(const std::string in){return write(_fd, in.c_str(), in.size());}~NamedPipe(){sleep(5);if (_id Creater){int res unlink(_fifo_path.c_str());if (res ! 0){perror(unlink);}std::cout creater remove named pipe std::endl;}if(_fd ! DefaultFd) close(_fd);}private:const std::string _fifo_path;int _id;int _fd; }; server.cc 读端 #include namedPipe.hpp// server -- read : 管理命名管道的整个生命周期 int main() {NamedPipe fifo(comm_path, Creater);// 对于读端而言如果我们打开了文件但是写还没有来我们会阻塞在open调中直到对方打开// -- 一种变向的进程同步if (fifo.OpenForRead()){std::cout Server open named pipe done std::endl; // 为了检测阻塞sleep(3);while (true){std::string message;int n fifo.ReadNamedPipe(message);if (n 0) // 正常接收{std::cout Client Say message std::endl;}else if(n 0) // 即写端关闭{std::cout Client quit, Server too! std::endl;break;}else {std::cout fifo.ReadNamedPipe Error! std::endl;break;}}}return 0; } client.cc写端 #include namedPipe.hpp// client -- write int main() {NamedPipe fifo(comm_path, User); // 以非创建身份实例化if(fifo.OpenForWrite()){std::cout client open named pipe done std::endl;while(true){std::cout Please Enter ;std::string message;std::getline(std::cin, message);fifo.WriteNamedPipe(message);}}return 0; } 效果 实现了两个进程无父子关系之间的通信 4疑点解决 写端未来读端open调用阻塞 读端关闭写端继续写入 5完整代码 namedPipe.hpp: #pragma once#include iostream #include string #include cstdio #include cerrno #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.hconst std::string comm_path ./myfifo;#define DefaultFd -1 #define Creater 1 #define User 2 #define Read O_RDONLY #define Write O_WRONLY #define BaseSize 4096class NamedPipe { private:bool OpenNamedPipe(int mode){_fd open(_fifo_path.c_str(), mode);if(_fd 0) return false;return true;}public:NamedPipe(const std::string path, int who): _fifo_path(path), _id(who), _fd(DefaultFd){if (_id Creater){int res mkfifo(_fifo_path.c_str(), 0666);if (res ! 0){perror(mkfifo);}std::cout creater create named pipe std::endl;}}bool OpenForRead(){return OpenNamedPipe(Read);}bool OpenForWrite(){return OpenNamedPipe(Write);}int ReadNamedPipe(std::string *out){char buffer[BaseSize];int n read(_fd, buffer, sizeof(buffer));if(n 0){buffer[n] 0; // \0*out buffer;}return n;}int WriteNamedPipe(const std::string in){return write(_fd, in.c_str(), in.size());}~NamedPipe(){sleep(5);if (_id Creater){int res unlink(_fifo_path.c_str());if (res ! 0){perror(unlink);}std::cout creater remove named pipe std::endl;}if(_fd ! DefaultFd) close(_fd);}private:const std::string _fifo_path;int _id;int _fd; }; server.cc: #include namedPipe.hpp// server -- read : 管理命名管道的整个生命周期 int main() {NamedPipe fifo(comm_path, Creater);// 对于读端而言如果我们打开了文件但是写还没有来我们会阻塞在open调中直到对方打开// -- 一种变向的进程同步if (fifo.OpenForRead()){std::cout Server open named pipe done std::endl;sleep(3);while (true){std::string message;int n fifo.ReadNamedPipe(message);if (n 0){std::cout Client Say message std::endl;}else if(n 0){std::cout Client quit, Server too! std::endl;break;}else{std::cout fifo.ReadNamedPipe Error! std::endl;break;}}}return 0; } client.cc: #include namedPipe.hpp// client -- write int main() {NamedPipe fifo(comm_path, User);if(fifo.OpenForWrite()){std::cout client open named pipe done std::endl;while(true){std::cout Please Enter ;std::string message;std::getline(std::cin, message);fifo.WriteNamedPipe(message);}}return 0; }
http://www.hkea.cn/news/14550968/

相关文章:

  • 免费网站优化排名设计制作建筑模型教案
  • 做网站需要什么材料做的网站图片不显示
  • 番禺网站建设优化网站开发毕设论文
  • 做网站动态效果心得做推文封面图网站
  • 上海做营销网站哪个公司好为企业提供网站建设服务
  • 南昌网站seo哪家公司好线在科技成都网站推广公司
  • 没有网站怎么做外贸山东济南seo优化
  • 肉山谷英雄传说新手任务登录英文网站怎么做做推广的网站需要注意什么
  • 怎样免费个人网站建设怎么样推广自己的网站
  • asp做素材网站水煮鱼wordpress模板
  • logo设计网站官网wordpress 导出数据
  • 做货代网站大型旅行社自建网站
  • 网站建设规划书实训报告天辰建设网
  • 宁波网站推广怎样做wordpress 增加 专题
  • 域名解析平台网站建设吴中网站开发建设多少钱
  • 在线购物网站开发项目主流跨境电商平台有哪些
  • 学校网站建设文字规范问题优优群排名优化软件
  • 网站开发设计的源码全功能电子商务网站建设
  • 自建网站平台做慧聪网价格网站价格
  • 视频上传网站如何做php网站开发手机绑定
  • 可以做淘宝客的网站有哪些开发网站如何赚钱
  • 餐饮食材配送网站开发企划书做是么网站
  • 家居网站建设精英公司注册费用流程
  • 镇江网站关键词优化wordpress 判断登录页面跳转
  • 创建网站的详细步骤建设公司网站需要准备什么科目
  • 金华大企业网站建设有哪些网络规划设计师论文万能模板
  • 网站开发方案怎么写通河新村街道网站建设
  • 小企业网站建设一般收费网站框架是什么
  • 宣城网站seo网站搭建课程标准
  • 电子商务网站建设结论最新的新闻