linux管道的容量和内部组织方式
2024-09-09 11:38:31
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 数据结构,但它们定义文件操作例程地址是不同的,其中一个是向管道中写入数据的例程地址,而另一个是从管道中读出数据的例程地址。这样,用户程序的系统调用仍然是通常的文件操作,而内核却利用这种抽象机制实现了管道这一特殊操作。
最新文章
- index+match函数在压实度中对盒号盒质量随机不重复的最佳使用
- ubuntu14.10建立热点wifi分享给手机
- Excel中的宏--VBA的简单例子
- MySQL5.7表空间加密
- 【转】ASP.NET常用数据绑定控件优劣总结
- Object转换为字符并去空格
- Yii 2.0.3 Advanced版控制器不能包含大写字母的Bug
- Struts 1 之配置文件
- 开发你的第一个BLE应用程序—Blinky
- RecyclerViewItemTouchHelperDemo【使用ItemTouchHelper进行拖拽排序功能】
- you-get 下载视频
- cmd常用命令总结
- 进制与进制转换DAY2
- oracle创建用户和密码以及授权登录问题
- linux学习笔记---grep
- System.out.println 报错: 只能运行在方法体内哦, 类里面只包含属性和方法哦,注意!
- EF利用重写SaveChanges()方法实现 审计日志记录
- OneZero第三周第五次站立会议(2016.4.8)
- win10不能被远程解决方案(开启远程桌面,防火墙仍不能被远程解决方案)
- PHP 中 int 和 integer 类型的区别