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

企业网站建设费怎么核算wordpress archives页

企业网站建设费怎么核算,wordpress archives页,大连百姓网,网站备案要买备案号进程间通信之匿名管道和命名管道的理解和实现 进程间通信什么是管道匿名管道代码实现管道的读写规则管道特点 命名管道创建命名管道代码实现 进程间通信 进程间通信的目的 数据传输#xff1a;一个进程需要将它的数据发送给另一个进程资源共享#xff1a;多个进程之间共享同… 进程间通信之匿名管道和命名管道的理解和实现 进程间通信什么是管道匿名管道代码实现管道的读写规则管道特点 命名管道创建命名管道代码实现 进程间通信 进程间通信的目的 数据传输一个进程需要将它的数据发送给另一个进程资源共享多个进程之间共享同样的资源。通知事件一个进程需要向另一个或一组进程发送消息通知它它们发生了某种事件如进程终止时要通知父进程。进程控制有些进程希望完全控制另一个进程的执行如Debug进程此时控制进程希望能够拦截另一个进程的所有陷入和异常并能够及时知道它的状态改变。 进程间通信的本质理解 进程间通信的前提首先需要让不同的进程都能够看到同一块“内存”。这个“内存”不能隶属于任何进程应该强调共享。 进程间通信的必要性   单进程无法使用并发能力更加无法实现多进程协同。 什么是管道 管道是进程通信的其中一种管道分为两种 #mermaid-svg-eue9aFbiXWY6Waw8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-eue9aFbiXWY6Waw8 .error-icon{fill:#552222;}#mermaid-svg-eue9aFbiXWY6Waw8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-eue9aFbiXWY6Waw8 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-eue9aFbiXWY6Waw8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-eue9aFbiXWY6Waw8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-eue9aFbiXWY6Waw8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-eue9aFbiXWY6Waw8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-eue9aFbiXWY6Waw8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-eue9aFbiXWY6Waw8 .marker.cross{stroke:#333333;}#mermaid-svg-eue9aFbiXWY6Waw8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-eue9aFbiXWY6Waw8 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-eue9aFbiXWY6Waw8 .cluster-label text{fill:#333;}#mermaid-svg-eue9aFbiXWY6Waw8 .cluster-label span{color:#333;}#mermaid-svg-eue9aFbiXWY6Waw8 .label text,#mermaid-svg-eue9aFbiXWY6Waw8 span{fill:#333;color:#333;}#mermaid-svg-eue9aFbiXWY6Waw8 .node rect,#mermaid-svg-eue9aFbiXWY6Waw8 .node circle,#mermaid-svg-eue9aFbiXWY6Waw8 .node ellipse,#mermaid-svg-eue9aFbiXWY6Waw8 .node polygon,#mermaid-svg-eue9aFbiXWY6Waw8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-eue9aFbiXWY6Waw8 .node .label{text-align:center;}#mermaid-svg-eue9aFbiXWY6Waw8 .node.clickable{cursor:pointer;}#mermaid-svg-eue9aFbiXWY6Waw8 .arrowheadPath{fill:#333333;}#mermaid-svg-eue9aFbiXWY6Waw8 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-eue9aFbiXWY6Waw8 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-eue9aFbiXWY6Waw8 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-eue9aFbiXWY6Waw8 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-eue9aFbiXWY6Waw8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-eue9aFbiXWY6Waw8 .cluster text{fill:#333;}#mermaid-svg-eue9aFbiXWY6Waw8 .cluster span{color:#333;}#mermaid-svg-eue9aFbiXWY6Waw8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-eue9aFbiXWY6Waw8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 管道 匿名管道pipe 命名管道 管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”。管道只能单向通信。 父进程fork之后父进程会copy一份files_struct给子进程但是父子进程的文件描述符依旧是指向同一份文件而这个文件就叫做管道。   管道某种意义上来说不是文件是一种方式进行交流的数据作为临时数据放在内存实际上是由内核维护的一个缓冲区在内核中被称为管道缓存当交流结束后临时数据就会被释放。所以也可以把管道看作是一个缓冲区。 匿名管道 #include unistd.h 功能:创建一无名管道 原型 int pipe(int fd[2]); 参数 fd文件描述符数组,其中fd[0]表示读端, fd[1]表示写端 返回值:成功返回0失败返回错误代码 管道的实现 分别以读写的方式打开同一个文件。 fork创建子进程。 双方进程各自关闭自己不需要的文件描述符为了实现单向通信但是如果想实现全双工通信可以创建多个管道来实现。 如何做到让不同的进程看到同一份资源 fork后让子进程继承—能够让具有血缘关系的进程进行进程间通信—常用于父子进程 代码实现 下面这是一个简易的匿名管道的实现当使用pipe函数时管道文件是通过 pipe 系统调用创建的。具体来说pipe 系统调用会在内核中创建一个管道并返回两个文件描述符这两个文件描述符分别用于读取和写入管道。 #include stdio.h #include unistd.h #include string.h #include cstdlib int main() {int fd[2];int retpp pipe(fd);if (retpp -1){perror(pipe);exit(1);}int fk fork();if (fk 0){perror(fork);exit(2);}if (fk 0){// child: 作读端首先得关闭写端close(fd[1]);char buf[1024];read(fd[0], buf, sizeof(buf));printf(child: %s\n, buf);}if (fk 0){// parent作写端首先得关闭读端close(fd[0]);char *bufp qwweereewrrere;write(fd[1], bufp, strlen(bufp));return 0;} }可不可以改变管道文件呢 下面的代码将文件t.txt作为管道文件。 #include stdio.h #include unistd.h #include string.h #include cstdlib #include sys/types.h #include sys/stat.h #include fcntl.h int main() {int fd[2];int retpp pipe(fd);if (retpp -1){perror(pipe);exit(1);}int fk fork();if (fk 0){perror(fork);exit(2);}int fd1 open(F:\\t.txt, O_RDWR | O_CREAT, 0666);if (fd1 0){perror(open);exit(3);}if (fk 0){// child: 作读端首先得关闭写端close(fd[1]);char buf[1024];dup2(fd[0], fd1);read(fd[0], buf, sizeof(buf));printf(%s\n, buf);}if (fk 0){// parent作写端首先得关闭读端close(fd[0]);const char *bufp qwweereewrrere;dup2(fd[1], fd1);write(fd[1], bufp, strlen(bufp));return 0;} }用fork来共享管道原理 站在文件描述符角度-深度理解管道 站在内核角度-管道本质 管道的读写规则 当没有数据可读时 O_NONBLOCK disableread调用阻塞即进程暂停执行一直等到有数据来到为止。O_NONBLOCK enableread调用返回-1errno值为EAGAIN。 当管道满的时候 O_NONBLOCK disable write调用阻塞直到有进程读走数据O_NONBLOCK enable调用返回-1errno值为EAGAIN 如果所有管道写端对应的文件描述符被关闭则read返回0如果所有管道读端对应的文件描述符被关闭则write操作会产生信号SIGPIPE,进而可能导致write进程 退出当要写入的数据量不大于PIPE_BUF时linux将保证写入的原子性。当要写入的数据量大于PIPE_BUF时linux将不再保证写入的原子性。 管道提供了访问控制 写端快读端慢 写端满了就不能再写了。写端慢读端快 管道没有数据时读端必须等待。写端关闭读端没有数据可读标识读到了文件结尾。读端关闭写端继续写OS终止写端进程。 管道特点 只能用于具有共同祖先的进程具有亲缘关系的进程之间进行通信通常一个管道由一个进程创 建然后该进程调用fork此后父、子进程之间就可应用该管道。管道提供流式服务一般而言进程退出管道释放所以管道的生命周期随进程一般而言内核会对管道操作进行同步与互斥管道是半双工的数据只能向一个方向流动需要双方通信时需要建立起两个管道 命名管道 管道应用的一个限制就是只能在具有共同祖先具有亲缘关系的进程间通信。如果我们想在不相关的进程之间交换数据可以使用FIFO文件来做这项工作它经常被称为命名管道。命名管道是一种特殊类型的文件 创建命名管道 命名管道可以从命令行上创建命令行方法是使用下面这个命令 mkfifo filename 命名管道也可以从程序里创建相关函数有 int mkfifo(const char *filename,mode_t mode); 比如我们可以这么创建命名管道 int main(int argc, char *argv[]) {mkfifo(p2, 0644);return 0; }匿名管道与命名管道的区别 匿名管道由pipe函数创建并打开。命名管道由mkfifo函数创建打开用openFIFO命名管道与pipe匿名管道之间唯一的区别在它们创建与打开的方式不同一但这些工作完成之后它们具有相同的语义。 命名管道的打开规则 如果当前打开操作是为读而打开FIFO时 O_NONBLOCK disable阻塞直到有相应进程为写而打开该FIFOO_NONBLOCK enable立刻返回成功 如果当前打开操作是为写而打开FIFO时 O_NONBLOCK disable阻塞直到有相应进程为读而打开该FIFOO_NONBLOCK enable立刻返回失败错误码为ENXIO 代码实现 下面的代码实现了客户端向命名管道中写入信息服务端从命名管道中将数据读取出来并打印在终端屏幕上。 // server.cpp#include stdio.h #include unistd.h #include string.h #include cstdlib #include sys/types.h #include sys/stat.h #include fcntl.h #include time.hint main() {srand((unsigned int)time(NULL));if (mkfifo(shard, 0666) 0){perror(mkfifo);exit(1);}int sfd open(shard, O_WRONLY, 0666);if (sfd 0){perror(server_open);exit(2);}while (1){int a rand() % 1000;char server_put[1024] {\0};sprintf(server_put, %d, a);printf(server: %s\n, server_put);write(sfd, server_put, sizeof(server_put));sleep(2);}return 0; }// client#include stdio.h #include unistd.h #include string.h #include cstdlib #include sys/types.h #include sys/stat.h #include fcntl.h #include time.hint main() {srand((unsigned int)time(NULL));int cfd open(shard, O_RDONLY, 0666);if (cfd 0){perror(client_open);exit(2);}while (1){char client_in[1024];read(cfd, client_in, sizeof(client_in));printf(client: %s\n, client_in);sleep(1);}return 0; }// makefile.PHANY:all all: server clientserver:server.cpp g -o $ $^ client:client.cpp g -o $ $^.PHANY:clean clean:rm -f client server shard创作不易你的点赞和关注都是对我莫大的鼓励再次感谢您的观看
http://www.pierceye.com/news/745067/

相关文章:

  • 网站读取速度慢58同城二手房出售
  • 个人备案 网站名称 例子wordpress怎样下载
  • 郑州网络营销网站定制做网站服务
  • 学校网站英文怎么做souq网站
  • 原油可以取什么做标题发网站免费建网站哪个好
  • 莱特币做空 网站一个虚拟主机可以放几个网站
  • 注册个体可以做网站吗太平洋建设集团有限公司
  • 餐饮环境评估在哪个网站做天元建设集团有限公司法人
  • 汽车租赁网站开发网站建设实验周志与总结
  • 有没有哪个做美食的网站wordpress多用户模版
  • 网站关键词几个justnews wordpress
  • 创维爱内购网站2017网站设计尺寸
  • 网站建设的一般过程包括哪些方面手机免费制作app的软件下载
  • dw对网站建设有哪些作用深圳团购网站设计多少钱
  • 阿里巴巴网站详情页怎么做龙岩公司做网站
  • 网站后台这么做视频教程佛山百度seo排名
  • 网站建立吸引人的策划活动适合做推广的平台
  • 无锡市住房和城乡建设局网站昆明做网站的网络公司
  • 家居seo整站优化方案已经有了网站源代码怎样搭建
  • 红河州网站建设对网站做维护
  • 网站建设5000费用预算wordpress 鼠标点击特效
  • 江门企业自助建站系统做网站诱导网站
  • 知识问答网站开发南昌建站
  • 开发网站需要租服务器网易企业邮箱如何申请注册
  • 青岛市黄岛区城市建设局网站南京建设监理协会网站
  • 网站设计要点做网站的是什么职业
  • 造型设计网站推荐哪些企业网站做得好
  • 东丰网站建设网络域名怎么注册
  • 行业网站模板装饰公司东莞网站建设
  • 成都政务网站建设电脑编程与网站建设