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

制作自己的网站 域名怎么弄wordpress发布的文章

制作自己的网站 域名怎么弄,wordpress发布的文章,无棣网站建设,服装网页设计素材文章目录 一.进程间通信:进程间通信的本质: 二.Linux管道通信匿名管道:关于管道通信的要点:基于匿名管道构建进程池: 三.System-V共享内存共享内存和命名管道协同通信 参考Linux内核源码版本------linux-2.4.3 一.进程间通信: 操作系统中,为了保证安全性,进程之间具有严格的独… 文章目录 一.进程间通信:进程间通信的本质: 二.Linux管道通信匿名管道:关于管道通信的要点:基于匿名管道构建进程池: 三.System-V共享内存共享内存和命名管道协同通信 参考Linux内核源码版本------linux-2.4.3 一.进程间通信: 操作系统中,为了保证安全性,进程之间具有严格的独立性(独立的PCB,独立的虚拟地址空间mm_struct和页表…等各种独立的系统资源),即便是父子进程之间也通过数据的写时拷贝保证了两者之间的的数据独立性.因此要实现进程间通信和任务协作,就要让不同进程的共同读写同一份信息资源.由于违背了进程独立性的原则,要实现进程间共享资源就需要一定的技术成本.进程间的独立性: 进程间通信的本质: 不同的进程对同一块内存资源进行的一系列的读写操作. 二.Linux管道通信 将同一个管道文件的文件结构体指针分别填入两个进程的文件信息列表(通过父子进程的继承关系或者open接口实现),之后两个进程便可以对管道文件的内核级读写缓冲区(本质上是一块内存)进行读写操作实现通信.管道通信是一种单向通信手段,有固定的读端进程和写端进程. 匿名管道: 匿名管道通信是父子进程间通信的一种方式.匿名管道通信机制图解: 内核视角下管道文件结构体内部结构: 关于管道通信的要点: 管道通信可用于进程间协同,提供访问控制(同步与互斥): 管道读写端正常,如果管道中缓冲区为空,则读端进程进入阻塞状态管道读写端正常,如果管道中缓冲区被写满,则写端进程进入阻塞状态管道写端先关闭,管道读端read接口返回0,标识读取结束管道读端先关闭,操作系统会终止写端进程. 基于匿名管道构建进程池: Task.hpp模拟任务列表 #include iostream #include cstdio #include string #include vector #include sys/types.h #include sys/wait.h #include cstdlib #include ctime #include cassert #include unistd.h//重定义函数指针 typedef void (*task_t)();void task1() {std::cout 执行任务1:矩阵计算 std::endl; } void task2() {std::cout 执行任务2:pid控制算法 std::endl; } void task3() {std::cout 执行任务3:图像计算 std::endl; } void task4() {std::cout 执行任务4:人脸识别算法 std::endl; }//向数组中加载任务 void LoadTask(std::vectortask_t tasks) {tasks.push_back(task1);tasks.push_back(task2);tasks.push_back(task3);tasks.push_back(task4); }#include Task.hpp using namespace std; #define ChildNum 5//子进程信息结构体 class Channel { public: Channel(){}Channel(const string Name,pid_t Childpid,int Pipefd): _Childpid(Childpid),_Pipefd(Pipefd),_Name(Name){}pid_t getpid() const {return _Childpid;}string PrintName() const {return _Name;}int Getfd() const {return _Pipefd;} private:pid_t _Childpid;int _Pipefd; //保存管道的写入端string _Name; };//子进程任务执行函数 void slaver(const vectortask_tTaskarr) {//任务码int CommandCode 0;while(true){int check read(0,CommandCode,sizeof(CommandCode));//若管道中没有数据且写入段没有关闭,子进程就会阻塞assert(check!-1);if(check 0){std::cout slaver say get a command: getpid() : CommandCode: CommandCode std::endl;//子进程解析并执行命令if(CommandCode 0 || CommandCode Taskarr.size()){cout CommandCode Error! slaver exit! endl;exit(0);}//子进程根据任务码执行任务Taskarr[CommandCode]();}else {//一旦父进程关闭管道写入端,check就会接收到0,子进程退出break;}} }//父进程向子进程发送任务的接口 void ctrlSlaver(const std::vectorChannel channels,const vectortask_tTaskarr) {int count 10;while(count--){sleep(1);//随机选择子进程发送任务码int choseSlaver rand()%channels.size();int Task rand()%Taskarr.size();cout 父进程向子进程 channels[choseSlaver].PrintName() 写入命令: Task endl;write(channels[choseSlaver].Getfd(),Task,sizeof(Task));}sleep(1);cout \n所有任务执行完毕,系统准备退出\n endl;sleep(2); }//构建进程池接口 void InitProcessPool(vectorChannel ChildProc,const vectortask_tTaskarr) {for(int i 0; i ChildNum; i){int pipefd[2];int check pipe(pipefd);assert(!check); (void)check;pid_t pid fork();assert(pid ! -1);//父进程写 子进程读if(pid 0){//子进程执行流close(pipefd[1]);//将stdin对应文件指针修改为管道的读入端dup2(pipefd[0],0);//将文件信息列表中对应的指针位置空close(pipefd[0]);slaver(Taskarr);close(0);exit(0);}close(pipefd[0]);//将管道的写入端存入channel对象中ChildProc.push_back(Channel(string(Process ) to_string(pid),pid,pipefd[1])); } }//父进程轮询等待子进程退出 void WaitChildProc(const std::vectorChannel channels) {//先关闭各个管道的写入端,相应的子进程会自动退出for(auto e : channels){close(e.Getfd());}//等待各个子进程退出for(auto e : channels){int Status 0;waitpid(e.getpid(),Status,0);cout 写入端关闭,子进程: e.getpid() 退出,退出码: WIFEXITED(Status) endl;} }int main() {vectortask_tTaskarr;LoadTask(Taskarr);srand(time(nullptr)^getpid()^1023);vectorChannel ChildProc;InitProcessPool(ChildProc,Taskarr);ctrlSlaver(ChildProc,Taskarr);WaitChildProc(ChildProc);return 0; }命名管道和匿名管道的内核原理相同 三.System-V共享内存 共享内存通信原理: 构建共享内存通信环境的系统接口: int shmget(key_t key, size_t size, int shmflg); key是用户自定义共享内存标识键,用ftok接口获取size是申请共享内存的大小shmflg:取IPC_CREAT时,接口可以申请共享内存并获取共享内存的key,若参数指定的共享内存已存在则直接返回共享内存的key;取IPC_CREAT | IPC_EXCL时,接口只能用于申请新的共享内存. void *shmat(int shmid, const void *shmaddr, int shmflg); 接口作用:在当前进程的虚拟地址空间的共享区中为指定的共享内存块编址,并建立页表映射. int shmdt(const void *shmaddr); 接口作用:共享内存块与当前进程的虚拟地址空间取消关联,进程将无法再访问指定的共享内存 int shmctl(int shmid, int cmd, struct shmid_ds *buf); 接口作用:对共享内存块进行cmd码指定的控制操作(比如释放操作),也可以用于获取共享内存块在内核中的描述信息 共享内存通信环境中,由于多个进程可以对同一个内存块直接进行读写操作,因此,共享内存通信缺少同步互斥机制,无法保证数据的读写安全,为此,可以借助命名管道为共享内存通信提供读写控制. 共享内存和命名管道协同通信 构建通信环境的接口头文件: #ifndef __COMM_HPP__ #define __COMM_HPP__#include log.hpp #include sys/sem.h #include sys/ipc.h #include sys/shm.husing namespace std; const int SIZE 4096; const string pathname /home/user1/LinuxLearning/sharedMEM; const int pro_id 0x123456;log LOG;//获取自定义共享内存key key_t GetKey(const string pathname,const int pro_id) {//KEY生成器key_t K ftok(pathname.c_str(),pro_id);if(K 0){LOG(Fatal,GetKey Error, message: %s\n,strerror(errno));exit(-1);}LOG(Info,key generated, message: %s\n,strerror(errno));return K; }//调用系统接口申请共享内存 int GetShareMemHelper(int flag) {key_t KEY GetKey(pathname,pro_id);//系统调用接口shmget申请共享内存或返回已存在的共享内存idint shmid shmget(KEY,SIZE,flag);if(shmid -1){LOG(Fatal,Get ShareMem failed, message: %s\n,strerror(errno));exit(-1);}LOG(Info,Get ShareMem completed, message: %s\n,strerror(errno));return shmid; }//申请新的共享内存 int CreateShm() {return GetShareMemHelper(IPC_CREAT | IPC_EXCL | 0666); }//获取已存在的共享内存的id int GetShm() {return GetShareMemHelper(IPC_CREAT); }#define FIFO_FILE ./myfifo #define MODE 0664enum {FIFO_CREATE_ERR 1,FIFO_DELETE_ERR,FIFO_OPEN_ERR };class Init { public:Init(){// 创建管道int n mkfifo(FIFO_FILE, MODE);if (n -1){perror(mkfifo);exit(FIFO_CREATE_ERR);}}~Init(){//管道去链接,若引用计数为0则删除管道文件int m unlink(FIFO_FILE);if (m -1){perror(unlink);exit(FIFO_DELETE_ERR);}} };#endif自制日志类log: #pragma once #include time.h #include stdarg.h #include sys/stat.h #include fcntl.h #include iostream #include sys/types.h #include sys/wait.h #include string #include cstdio #include cstring #include cassert #include unistd.h #include stdlib.h//日志等级 #define Info 0 #define Debug 1 #define Warning 2 #define Error 3 #define Fatal 4 //日志写入方式 #define Screen 1 #define Onefile 2 #define Classfile 3 #define LogFile log.txtusing std :: string; class log { public:log(){printMethod Screen;path ./log/;}void Enable(int method){printMethod method;}string LeveltoString(int level){switch (level){case 0:return string(Info);break;case 1:return string(Debug);break;case 2:return string(Warning);break;case 3:return string(Error);break;case 4:return string(Fatal);break;default:break;}}void operator()(int level,char * format,...){//将时间格式化存入tm结构体中time_t t time(nullptr);struct tm* ctime localtime(t);char leftbuffer[1024];snprintf(leftbuffer,sizeof(leftbuffer),[%s][%d-%d-%d %d:%d:%d],LeveltoString(level).c_str(),ctime-tm_year1900,ctime-tm_mon1,ctime-tm_mday,ctime-tm_hour,ctime-tm_min,ctime-tm_sec);//解析可变参数va_list vls;va_start(vls,format);char rightbuffer[1024];vsnprintf(rightbuffer,sizeof(rightbuffer),format,vls);va_end(vls);//合并时间和可变参数char logtxt[2048];snprintf(logtxt,sizeof(logtxt),%s %s\n,leftbuffer,rightbuffer);//执行日志记录printLog(level,string(logtxt));}//日志信息写出接口void printLog(int level, const std::string logtxt){switch (printMethod){case Screen://将日志信息打印到标准输出std::cout logtxt std::endl;break;case Onefile://将日志信息存入log.txtprintOneFile(LogFile, logtxt);break;case Classfile://将日志信息存入指定的分类日志文件printClassFile(level, logtxt);break;default:break;}}//日志信息写到log.txt中void printOneFile(const std::string logname, const std::string logtxt){//path--日志保存路径 logname--日志文件名std::string _logname path logname;//打开log.txt日志文件int fd open(_logname.c_str(), O_WRONLY | O_CREAT | O_APPEND, 0666); if (fd 0)return;write(fd, logtxt.c_str(), logtxt.size());close(fd);}//日志信息写到log.txt.level中void printClassFile(int level, const std::string logtxt){//对日志文件名进行修改,根据日志等级分出多个日志文件std::string filename LogFile;filename .;// log.txt.Debug(Warning)(Fatal)filename LeveltoString(level); printOneFile(filename, logtxt);}~log(){} private:int printMethod;std::string path; };读端进程示例: #include log.hpp #include ShareMemBuild.hppextern log LOG;int main() {//创建管道和共享内存Init pipeCreate;int shmid CreateShm();//建立共享内存与进程虚拟地址空间之间的映射,并获取共享内存的虚拟地址char * shmaddr (char *)shmat(shmid,NULL,0);//打开管道文件int fd open(FIFO_FILE,O_RDONLY);if(fd -1){LOG(Fatal, error string: %s, error code: %d, strerror(errno), errno);exit(FIFO_OPEN_ERR);}while(true){//借助管道进行共享内存的读写控制,若写端没有给信号,则读端保持阻塞状态char c;int RSize read(fd,c,sizeof(c));if(RSize 0) break;//直接访问共享内存,实现高效通信cout client say shmaddr endl; sleep(1);}//进程与共享内存断开连接shmdt(shmaddr);//将共享内存标记为已销毁shmctl(shmid,IPC_RMID,nullptr);close(fd);return 0; }写端进程示例: #include log.hpp #include ShareMemBuild.hppextern log LOG;int main() { //获取共享内存标识int shmid GetShm();//建立共享内存与进程虚拟地址空间之间的映射,并获取共享内存的虚拟地址char * shmaddr (char *)shmat(shmid,NULL,0);//打开管道文件int fd open(FIFO_FILE,O_WRONLY);if(fd -1){LOG(Fatal, error string: %s, error code: %d, strerror(errno), errno);exit(FIFO_OPEN_ERR);}while(true){cout Please Enter ;//将信息写入共享内存fgets(shmaddr, 4096, stdin);//管道写入信号,解除读端的阻塞状态write(fd, c, 1); }//进程与共享内存断开连接shmdt(shmaddr);close(fd);return 0; }多个进程直接通过各自的虚拟地址空间对同一个内存块进行访问使得共享内存通信具有很高的通信效率.管道通信过程中,数据至少要经过两次拷贝(用户读写缓冲区和内核读写缓冲区之间的拷贝),而共享内存通信不存在通信数据拷贝问题共享内存,消息队列,信号量等通信内存资源(称为ipc资源)统一由操作系统描述为各种数据结构统一进行管理,在Linux内核中,描述共享内存,消息队列,信号量的结构体形成继承体系:(C语言实现的继承体系)
文章转载自:
http://www.morning.mypxm.com.gov.cn.mypxm.com
http://www.morning.ptwrz.cn.gov.cn.ptwrz.cn
http://www.morning.pwdgy.cn.gov.cn.pwdgy.cn
http://www.morning.nzcgj.cn.gov.cn.nzcgj.cn
http://www.morning.nffwl.cn.gov.cn.nffwl.cn
http://www.morning.rcbdn.cn.gov.cn.rcbdn.cn
http://www.morning.xinxianzhi005.com.gov.cn.xinxianzhi005.com
http://www.morning.nmhpq.cn.gov.cn.nmhpq.cn
http://www.morning.tblbr.cn.gov.cn.tblbr.cn
http://www.morning.dcmnl.cn.gov.cn.dcmnl.cn
http://www.morning.rtryr.cn.gov.cn.rtryr.cn
http://www.morning.lhrwy.cn.gov.cn.lhrwy.cn
http://www.morning.ndcjq.cn.gov.cn.ndcjq.cn
http://www.morning.rwyd.cn.gov.cn.rwyd.cn
http://www.morning.dtcsp.cn.gov.cn.dtcsp.cn
http://www.morning.pjbhk.cn.gov.cn.pjbhk.cn
http://www.morning.mmhyx.cn.gov.cn.mmhyx.cn
http://www.morning.qcbhb.cn.gov.cn.qcbhb.cn
http://www.morning.ssjry.cn.gov.cn.ssjry.cn
http://www.morning.txzmy.cn.gov.cn.txzmy.cn
http://www.morning.sjgsh.cn.gov.cn.sjgsh.cn
http://www.morning.rnxs.cn.gov.cn.rnxs.cn
http://www.morning.ktcfl.cn.gov.cn.ktcfl.cn
http://www.morning.rhsg.cn.gov.cn.rhsg.cn
http://www.morning.kgphd.cn.gov.cn.kgphd.cn
http://www.morning.qgkcs.cn.gov.cn.qgkcs.cn
http://www.morning.tjqcfw.cn.gov.cn.tjqcfw.cn
http://www.morning.qbmpb.cn.gov.cn.qbmpb.cn
http://www.morning.mqtzd.cn.gov.cn.mqtzd.cn
http://www.morning.wdjcr.cn.gov.cn.wdjcr.cn
http://www.morning.npmcf.cn.gov.cn.npmcf.cn
http://www.morning.zfxrx.cn.gov.cn.zfxrx.cn
http://www.morning.jqllx.cn.gov.cn.jqllx.cn
http://www.morning.lskyz.cn.gov.cn.lskyz.cn
http://www.morning.yrjhr.cn.gov.cn.yrjhr.cn
http://www.morning.xtrzh.cn.gov.cn.xtrzh.cn
http://www.morning.nkjkh.cn.gov.cn.nkjkh.cn
http://www.morning.ckhry.cn.gov.cn.ckhry.cn
http://www.morning.nzcys.cn.gov.cn.nzcys.cn
http://www.morning.dqgbx.cn.gov.cn.dqgbx.cn
http://www.morning.fbzyc.cn.gov.cn.fbzyc.cn
http://www.morning.rwrn.cn.gov.cn.rwrn.cn
http://www.morning.ssqwr.cn.gov.cn.ssqwr.cn
http://www.morning.hdrsr.cn.gov.cn.hdrsr.cn
http://www.morning.bhpsz.cn.gov.cn.bhpsz.cn
http://www.morning.bpcf.cn.gov.cn.bpcf.cn
http://www.morning.rgfx.cn.gov.cn.rgfx.cn
http://www.morning.lsssx.cn.gov.cn.lsssx.cn
http://www.morning.lfttb.cn.gov.cn.lfttb.cn
http://www.morning.qttft.cn.gov.cn.qttft.cn
http://www.morning.kpypy.cn.gov.cn.kpypy.cn
http://www.morning.pflpb.cn.gov.cn.pflpb.cn
http://www.morning.pmdlk.cn.gov.cn.pmdlk.cn
http://www.morning.rylr.cn.gov.cn.rylr.cn
http://www.morning.wschl.cn.gov.cn.wschl.cn
http://www.morning.hysqx.cn.gov.cn.hysqx.cn
http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn
http://www.morning.yknsr.cn.gov.cn.yknsr.cn
http://www.morning.nrtpb.cn.gov.cn.nrtpb.cn
http://www.morning.tscsd.cn.gov.cn.tscsd.cn
http://www.morning.cbnxq.cn.gov.cn.cbnxq.cn
http://www.morning.xdxpq.cn.gov.cn.xdxpq.cn
http://www.morning.daidudu.com.gov.cn.daidudu.com
http://www.morning.rcrnw.cn.gov.cn.rcrnw.cn
http://www.morning.mxnhq.cn.gov.cn.mxnhq.cn
http://www.morning.kfclh.cn.gov.cn.kfclh.cn
http://www.morning.xnwjt.cn.gov.cn.xnwjt.cn
http://www.morning.pqnkg.cn.gov.cn.pqnkg.cn
http://www.morning.ydxg.cn.gov.cn.ydxg.cn
http://www.morning.mmclj.cn.gov.cn.mmclj.cn
http://www.morning.mnclk.cn.gov.cn.mnclk.cn
http://www.morning.bsxws.cn.gov.cn.bsxws.cn
http://www.morning.prmyx.cn.gov.cn.prmyx.cn
http://www.morning.zqbrw.cn.gov.cn.zqbrw.cn
http://www.morning.cwjsz.cn.gov.cn.cwjsz.cn
http://www.morning.tqgmd.cn.gov.cn.tqgmd.cn
http://www.morning.bpkqd.cn.gov.cn.bpkqd.cn
http://www.morning.dfrenti.com.gov.cn.dfrenti.com
http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn
http://www.morning.zdnrb.cn.gov.cn.zdnrb.cn
http://www.tj-hxxt.cn/news/270688.html

相关文章:

  • 哪些网站可以发广告产品设计排版模板
  • 内江市住房和城乡建设局网站看房地产的app在哪看
  • 苏州网站开发公司兴田德润放心网页传奇排名
  • 丰都网站建设费用外贸网站建设培训
  • 洛阳网站建设哪家好零食网站建设规划书
  • 做网站的商家怎么后去流量费百度热搜词排行榜
  • 天津手机网站建站培训配置外网访问WordPress
  • 网站建设免费维护内容天津做艺术品的网站
  • 网站备案网站负责人六安网站建设推荐
  • 网站优化外包推荐做网站有什么优势
  • 做婚宴的网站有哪些如何删除wordpress每个栏目页面下方的分类目录归档
  • 建站教程的实现方式公司网站的专题策划
  • flash静态网站房地产网站怎么推广
  • 简述电子商务网站开发的基本原则p2p网站如何建设
  • 正规的营销型网站建设公司设计网站源码
  • 网站开发的五个阶段四川建设人才网官网首页
  • 舆情信息贵阳网站搜索优化
  • 上海做网站的的公司手机开发和网站开发前景
  • 滨州网站建设模板建设自己做网站需要什么条件
  • 网站开发设计比赛建e室内设计网官网模型
  • 福州住房和建设局网站电话营销技巧和营销方法
  • 公司的网站建设费进入什么科目新品发布会ppt
  • 品牌创意型网站建设用jsp做视频网站
  • 自己建一个网站怎么赚钱私人诊所网站源码
  • 做淘宝网站用什么软件广州市建筑信息平台
  • 企业网站城市分站系统wordpress friday
  • 宁波建网站公司四川微信网站建设推广
  • 长春网站建设小程序哈尔滨建站公司模板
  • 网站建设服务非常好湖南岚鸿公司乡镇医院网站建设
  • 企业网站源码怎么用建设网站需要的资源