1.管道容量  count=65536,即64KB

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int _pipe[2];
if(pipe(_pipe)==-1)
{
printf("pipe error\n");
return 1;
}
int ret;
int count=0;
int flag=fcntl(_pipe[1],F_GETFL);
fcntl(_pipe[1],F_SETFL,flag|O_NONBLOCK);
while(1)
{
ret=write(_pipe[1],"A",1);
if(ret==-1)
{
printf("error %s\n",strerror(errno));
break;
}
count++;
}
printf("count=%d\n",count);
return 0;
}

  2.管道的内部组织方式

   在 Linux 中,管道的实现并没有使用专门的数据结构,而是借助了文件系统的file结构和VFS的索引节点inode。通过将两个 file 结构指向同一个临时的 VFS 索引节点,而这个 VFS 索引节点又指向一个物理页面而实现的。

  有两个 file 数据结构,但它们定义文件操作例程地址是不同的,其中一个是向管道中写入数据的例程地址,而另一个是从管道中读出数据的例程地址。这样,用户程序的系统调用仍然是通常的文件操作,而内核却利用这种抽象机制实现了管道这一特殊操作。

最新文章

  1. index+match函数在压实度中对盒号盒质量随机不重复的最佳使用
  2. ubuntu14.10建立热点wifi分享给手机
  3. Excel中的宏--VBA的简单例子
  4. MySQL5.7表空间加密
  5. 【转】ASP.NET常用数据绑定控件优劣总结
  6. Object转换为字符并去空格
  7. Yii 2.0.3 Advanced版控制器不能包含大写字母的Bug
  8. Struts 1 之配置文件
  9. 开发你的第一个BLE应用程序—Blinky
  10. RecyclerViewItemTouchHelperDemo【使用ItemTouchHelper进行拖拽排序功能】
  11. you-get 下载视频
  12. cmd常用命令总结
  13. 进制与进制转换DAY2
  14. oracle创建用户和密码以及授权登录问题
  15. linux学习笔记---grep
  16. System.out.println 报错: 只能运行在方法体内哦, 类里面只包含属性和方法哦,注意!
  17. EF利用重写SaveChanges()方法实现 审计日志记录
  18. OneZero第三周第五次站立会议(2016.4.8)
  19. win10不能被远程解决方案(开启远程桌面,防火墙仍不能被远程解决方案)
  20. PHP 中 int 和 integer 类型的区别

热门文章

  1. 分享SVN的钩子代码[借鉴学习]pre-commit-post 钩子
  2. redis的hash操作在集中式session中的应用
  3. Enable HTTPS in Spring Boot
  4. 学习opencv中文版教程——第二章
  5. Linux:返回上一次目录 / 返回上次命令目录
  6. Oracle性能调优(AWR)
  7. scala学习笔记:集合
  8. lrzsz on linux
  9. C#微信开发之旅--准备阶段
  10. java集合_collection子接口 list的特有方法,ArrayList类体现