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

站长网站素材网长沙seo优化服务

站长网站素材网,长沙seo优化服务,江门市做网站,网站点击弹出下载框 怎么做inux管道管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间#xff0c;这是它与有名管道的最大区别。有名管道叫namedpipe或者FIFO(先进先出)#xff0c;可以用函数mkfifo(…inux管道管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间这是它与有名管道的最大区别。有名管道叫namedpipe或者FIFO(先进先出)可以用函数mkfifo()创建。Linux管道的实现机制从本质上说管道也是一种文件但它又和一般的文件有所不同管道可以克服使用文件进行通信的两个问题具体表现为·限制管道的大小。实际上管道是一个固定大小的缓冲区。在Linux中该缓冲区的大小为1页即4K字节使得它的大小不象文件那样不加检验地增长。使用单个固定缓冲区也会带来问题比如在写管道时可能变满当这种情况发生时随后对管道的write()调用将默认地被阻塞等待某些数据被读取以便腾出足够的空间供write()调用写。·读取进程也可能工作得比写进程快。当所有当前进程数据已被读取时管道变空。当这种情况发生时一个随后的read()调用将默认地被阻塞等待某些数据被写入这解决了read()调用返回文件结束的问题。注意从管道读数据是一次性操作数据一旦被读它就从管道中被抛弃释放空间以便写更多的数据。1.管道的结构在Linux 中管道的实现并没有使用专门的数据结构而是借助了文件系统的file结构和VFS的索引节点inode。通过将两个 file结构指向同一个临时的 VFS 索引节点而这个 VFS索引节点又指向一个物理页面而实现的。2.管道的读写管道实现的源代码在fs/pipe.c中在pipe.c中有很多函数其中有两个函数比较重要即管道读函数pipe_read()和管道写函数pipe_wrtie()。管道写函数通过将字节复制到VFS索引节点指向的物理内存而写入数据而管道读函数则通过复制物理内存中的字节而读出数据。当然内核必须利用一定的机制同步对管道的访问为此内核使用了锁、等待队列和信号。当写进程向管道中写入时它利用标准的库函数write()系统根据库函数传递的文件描述符可找到该文件的file 结构。file结构中指定了用来进行写操作的函数(即写入函数)地址于是内核调用该函数完成写操作。写入函数在向内存中写入数据之前必须首先检查VFS 索引节点中的信息同时满足如下条件时才能进行实际的内存复制工作·内存中有足够的空间可容纳所有要写入的数据·内存没有被读程序锁定。如果同时满足上述条件写入函数首先锁定内存然后从写进程的地址空间中复制数据到内存。否则写入进程就休眠在 VFS索引节点的等待队列中接下来内核将调用调度程序而调度程序会选择其他进程运行。写入进程实际处于可中断的等待状态当内存中有足够的空间可以容纳写入数据或内存被解锁时读取进程会唤醒写入进程这时写入进程将接收到信号。当数据写入内存之后内存被解锁而所有休眠在索引节点的读取进程会被唤醒。管道的读取过程和写入过程类似。但是进程可以在没有数据或内存被锁定时立即返回错误信息而不是阻塞该进程这依赖于文件或管道的打开模式。反之进程可以休眠在索引节点的等待队列中等待写入进程写入数据。当所有的进程完成了管道操作之后管道的索引节点被丢弃而共享数据页也被释放。因为管道的实现涉及很多文件的操作,因此,当读者学完有关文件系统的内容后来读pipe.c中的代码你会觉得并不难理解。Linux管道的创建和使用都要简单一些唯一的原因是它需要更少的参数。实现与 Windows 相同的管道创建目标Linux 和 UNIX使用下面的代码片段pipe函数来创建 Linux命名管道intfd1[2];if(pipe(fd1)){ printf(pipe() FAILED:errno%d,errno);return 1;}Linux管道对阻塞之前一次写操作的大小有限制。专门为每个管道所使用的内核级缓冲区确切为 4096 字节。 除非阅读器清空管道否则一次超过4K的写操作将被阻塞。实际上这算不上什么限制因为读和写操作是在不同的线程中实现的。Linux还支持命名管道。对这些数字的早期评论员建议我为公平起见应该比较 Linux 的命名管道和 Windows的命名管道。我写了另一个在 Linux 上使用命名管道的程序。我发现对于 Linux上命名的和未命名的管道结果是没有区别。Linux 管道比 Windows 2000命名管道快很多而 Windows 2000 命名管道比 Windows XP命名管道快得多。例子:#include#includeintmain(){int n,fd[2]; //这里的fd是文件描述符的数组用于创建管道做准备的pid_tpid;charline[100];if(pipe(fd)0) //创建管道printf(pipe createerror\n);if((pidfork())0)//利用fork()创建新进程printf(forkerror\n);else if(pid0){//这里是父进程先关闭管道的读出端然后在管道的写端写入“helloworldclose(fd[0]);write(fd[1],helloword\n,11);}else{close(fd[1]);//这里是子进程先关闭管道的写入端然后在管道的读出端读出数据nread(fd[0],line,100);write(STDOUT_FILENO,line,n);}exit(0);}
http://www.yutouwan.com/news/419143/

相关文章:

  • 建立英文网站wordpress精致建站
  • 先网站开发后软件开发好wordpress二次元网站
  • 学网站开发去哪学中英文微信网站建设
  • 开原网站制作公司大型回合制手游排行榜
  • 福州台江区网站建设简历模板免费下载word 文档
  • 如何制作网站图片网站规划的原则有哪些内容
  • 上海市建设监理协会网站查询招生型网站建设
  • 太阳镜商城网站建设wordpress广告模板下载
  • 电子商务网站建设作品百度统计 wordpress 插件
  • 10m光纤做网站wordpress表格
  • 家具网站开发报告网站建设氺金手指排名11
  • 等保二级网站建设方案网站功能需求列表
  • 技术支持 合肥网站建设网站建设会使用的技术
  • 地板网站源码临沂市建设局的网站
  • 上海推广网站公司可以生成静态网站源码
  • 设计专业新手网站国家职业资格证书全国联网
  • 网站开发 培训织梦网站模板响应式
  • 网站有很多304状态码代写新闻稿
  • 长春高端品牌网站建设怎么查询在建工程
  • 怎样弄一个网站什么是关键词搜索
  • 惠州做网站的公司哪家好html5怎么做简单的网站
  • 武进区住房和城乡建设局网站免费平台
  • 注册域名网站wordpress制作小工具
  • 高端网站建设必去磐石网络平面设计网站大全有哪些
  • 外贸网站建设是什么意思做有声小说网站
  • 北京网站开发哪家专业网站推广计划包含的主要内容
  • 宣传册设计与制作模板免费seo1视频发布会
  • 怎么注册网站域名唐山网站制作价格
  • 网站运营做产品需要哪些知识discuz做电影网站
  • 如何在jsp上做网站页面公司怎么做网站平台