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

哪家能建设网站应用软件免费下载

哪家能建设网站,应用软件免费下载,hexo发布wordpress,成都idc机房托管作者 | 刘光录来源 | TIAP我们在命令行中经常会用到类似 cmd0 | cmd1 | cmd2 的写法。其实#xff0c;这是管道重定向#xff08;pipe redirection#xff09;#xff0c;用于将一个命令的输出作为输入重定向到下一个命令。那么#xff0c;你知道它具体是怎么工作的吗这是管道重定向pipe redirection用于将一个命令的输出作为输入重定向到下一个命令。那么你知道它具体是怎么工作的吗今天我们来详细了解一下。注本文中会有多个地方使用 Unix 这个术语而不是Linux因为管道的概念起源于 Unix。Linux 中的管道总体思路以下是关于“什么是 Unix 管道”的内容Unix 管道是一种 IPCInter Process Communication进程间通信机制它将一个程序的输出转发到另一程序的输入。现在我们换一种更加专业且易懂的语言重新解释一下Unix 管道是一种 IPCInter Process Communication进程间通信机制它接收程序的标准输出stdout并通过缓冲区将其转发给另一个程序的标准输入stdin。这样的描述大家应该能理解了。参考下图可以了解管道的工作原理管道命令的最简单示例之一是将一些命令输出传递给 grep 命令以搜索特定字符串。比如我们可以搜索名称包含txt的文件如下所示管道将标准输出重定向到标准输入但不是作为命令参数有个非常重要的一点需要注意管道命令将标准输出stdout传递到另一个命令的标准输入stdin但不是作为参数。下面我们举个例子来说明这一点。如果我们不带任何参数使用 cat 命令它默认会从 stdin 读取内容。看下面的例子$ cat Hello, my friend. ^D Hello, my friend.在上面的例子中没有带任何参数使用了 cat因此它默认会读取 stdin。接下来我写了一行文字然后按键 Ctrld 告诉它我写完了Ctrld 表示 EOF 或文件结束。随后cat 命令读取 stdin然后把之前我写的那行文字输出到了终端中。现在看如下命令echo hey | cat管道右边的命令并不等于 cat hey。这里标准输出stdouthey 被放在了缓冲区buffer并被传输到了 cat 命令的标准输入stdin。由于没有命令行参数所以 cat 默认读取 stdin而 stdin 中恰好有了内容即“hey”因此 cat 读取了这个内容并将其打印到 stdout。为了演示这个区别我们可以创建一个名为 hey 的文件并在其中添加一些文本。参见下图Linux 中的管道类型Linux 中有两种类型的管道1匿名管道也就是未命名管道2命名管道。匿名管道顾名思义匿名管道就是没有名称。当你使用 | 符号时它们就会由 Unix shell 动态创建了。我们通常所说的管道就是指的匿名管道。它用起来很方便作为最终用户我们不需要跟踪它的运行shell 自动会处理这一切。命名管道这个稍有不同命名管道在文件系统中确实存在。它们像普通文件一样存在可以使用下面的命令创建命名管道mkfifo pipe这将创建一个名为 pipe 的文件执行以下命令$ ls -l pipe prw-r--r--. 1 gliu gliu 0 Aug 4 17:23 pipe请注意开头的“p”这意味着该文件是一个管道。现在我们来使用这个管道。如前所述管道将命令的输出转发给另一个命令的输入。这就像快递服务你把包裹从一个地址送到另一个地址。因此第一步是提供包裹。echo hey pipe我们会看到 echo 信息没有打印出来看起来像是被挂起了。新打开一个终端尝试读取该文件cat pipe我们看下两个终端的输出结果如下图所示惊讶吗这两个命令同时完成了执行。这是普通文件和命名管道之间的基本区别之一。在其他进程读取管道之前不会将任何内容写入管道。那么为什么要使用命名管道呢我们来看一下。命名管道不会占用磁盘上的任何内存。如果我们执行命令 du -s pipe就会发现它不会占用任何空间。这是因为命名管道就像从内存缓冲区读写的端点。写入命名管道的任何内容实际上都存储在临时内存缓冲区中当从另一个进程执行读取操作时该缓冲区将被刷新。节省 IO因为写入命名管道意味着将数据存储到内存中的缓冲区中因此如果涉及大文件的操作的话就会大幅减少磁盘 I/O。两个不同进程之间的通信通过使用命名管道可以高效地从另一个进程实时获取事件的输出。因为读和写同时发生所以没有等待时间。较低层次的管道理解针对高级用户和开发人员接下来我们更深入的讨论一下管道以及具体的实现。这些需要对以下内容有基本的了解C 程序工作原理什么是系统调用什么是进程什么是文件描述符。我们不会很详细的介绍这些概念只讨论与管道相关的内容。对于大多数Linux用户来说下面的内容可以选择性的阅读。为了进行编译在文章最后提供了一个示例 makefile。当然这只是用来说明的伪代码。看以下程序// pipe.c #include unistd.h #include stdio.h #include sys/types.h #include stdlib.h #include errno.hextern int errno;int main(){ signed int fd[2]; pid_t pid; static char input[50]; static char buf[50];pipe(fd);if((pidfork())-1){ int errerrno;perror(fork failed); exit(err);}if(pid){close(fd[1]);read(fd[0], buf, 50); printf(The message read from child: %s\n, buf);} else {close(fd[0]); printf(Enter a message from parent: ); for(int i0; (input[i]getchar())!EOF input[i]!\n i49; i);write(fd[1], input, 50); exit(0);} return 0; }在第16行我使用 pipe() 函数创建了一个匿名管道传递了一个长度为 2 的带符号整数数组。这是因为管道只是一个包含两个无符号整数的数组代表两个文件描述符。一个用于写一个用于读。它们都指向内存上的缓冲区位置通常为1mb。这里我将变量命名为fd。fd[0] 是输入文件描述符fd[1] 是输出文件描述符。在该程序中一个进程将字符串写入 fd[1] 文件描述符另一个进程从 fd[0] 文件描述符读取。命名管道也一样使用命名管道而不是两个文件描述符你可以从任何一个进程中打开一个文件并像其他文件一样对其进行操作。同时应记住管道的特性。下面是一个示例程序它执行与前一个程序相同的操作但它创建的不是匿名管道而是命名管道// fifo.c #include unistd.h #include sys/types.h #include errno.h #include stdlib.h #include string.h #include stdio.h #include fcntl.h #include sys/stat.hextern int errno;#define fifo npipeint main(void){ pid_t pid; static char input[50]; static char buf[50]; signed int fd;mknod(fifo, S_IFIFO|0700, 0);if((pidfork())0){ int errerrno;perror(Fork failed); exit(err);}if(pid){fdopen(fifo, O_RDONLY);read(fd, buf, 50);close(fd); printf(The output is : %s, buf);remove(fifo); exit(0);} else {fdopen(fifo, O_WRONLY); for(int i0; (input[i]getchar())!EOF input[i]!\n i49; i);write(fd, input, strlen(input));close(fd); exit(0);} return 0; }在这里我使用 mknod 系统调用来创建命名管道。如你所见虽然在完成时删除了管道但你可以不使用它只需要打开并写入本例中的 npipe 文件就可以轻松的实现在不同进程之间的通信。其实现实中我们也不必创建两个管道来实现双向通信匿名管道就是这样的。以下是一个简单的 Makefile 的源代码示例只是示例将其与前面的程序放在同一个目录中分别为 pipe.c 和 fifo.c。CFLAGS?-Wall -g -O2 -Werror CC?clangbuild: $(CC) $(CFLAGS) -o pipe pipe.c $(CC) $(CFLAGS) -o fifo fifo.cclean: rm -rf pipe fifo以上就是本次分享的关于 Unix 管道的全部内容欢迎讨论。往期推荐一篇文章了解 Docker 的安装、启动以及工作原理剖析 kubernetes 集群内部 DNS 解析原理Docker 镜像和容器的导入导出及常用命令如何从 Docker 镜像里提取 dockerfile点分享点收藏点点赞点在看
http://wiki.neutronadmin.com/news/223949/

相关文章:

  • 百盛联合建设集团网站企业网站模板 网页模板
  • 代做机械毕业设计网站如何在百度上为企业做网站
  • 保定网站建设公司哪家好查企业下载什么软件
  • 潜江做网站的请简述网站建设的一般流程
  • 网站打开速度突然变慢的原因wordpress不同分类模板
  • 极简风格网站介绍鄂州一网
  • 新注册公司网站免费怎么做关于网站建设的故事
  • 上海工程建设招投标网站wordpress多站点统计
  • 招聘网站建设的项目描述wordpress文章采集发布插件
  • 模板网站有利于优化ps制作博客网站界面
  • 网站建设报价表模板下载wordpress怎么链接地址
  • 帝国网站调用图片集网站优化方案案例
  • 统计局网站建设情况猪场宣传网站怎么建设
  • 拱墅区网站建设高端网站建设 上海
  • 网站设置的用途网站建设小程序定制开发
  • 怎么做仿制网站wordpress旋转音乐
  • 烟台专业网站建设公司网站安全体系建设方案
  • 域名如何做网站上海哪个区买房最好
  • 门户网站建设和检务公开整改外贸公司怎么找客户
  • 为网站设计手机版自己建的网站地址
  • 企业网站建设用标语网站如何在国外推广
  • 如何架设网站服务器邯郸市住房公积金管理中心
  • 网站已备案添加新域名电商平台网站有哪些
  • 广西网站建设教程wordpress 图片管理插件
  • 佛山网站推广市场设计建网站
  • 济南建设网站公司哪个好苏州企业网站设计方案
  • 房地产网站制作教程多少钱翻译
  • 怎么做网站竞价推广可以进网站的软件
  • 东南亚购物网站排名京东联盟 wordpress
  • 网站排名软件推荐wordpress 证书风险