免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2128 | 回复: 1
打印 上一主题 下一主题

[C] Linux下各种buffer的比较 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-24 04:40 |只看该作者 |倒序浏览
本帖最后由 没本 于 2010-06-24 04:42 编辑

Linux下各种buffer的比较(转载)
原文发表于「桃源」: http://linux.cuit.edu.cn/?p=919
类型默认大小[1]存储位置操作函数备注
标准I/O流[2]FileBUFSIZ[3] (8192) 或者st_blksize[4] (4096)User Spacestat(2),setvbuf(),fflush()每一个标准I/O流都有一个buffer
stdinstdin->_IO_buf_end[5] - stdin->_IO_buf_base(1024)
stdoutstdout->_IO_buf_end - stdout->_IO_buf_base(1024)
stderr1
TCPReceive BufferSO_RCVBUF[6] (87380)Kernel Spacegetsockopt(),setsockopt()每一个socket都有两个buffer
Send BufferSO_SNDBUF (16384)
UDP[7]Receive BufferSO_RCVBUF (114688)
Send BufferSO_SNDBUF (114688)

脚注:
  • 括号中的数字为我电脑上的实际大小, 单位为字节. 测试环境: Ubuntu 9.10, 内核版本2.6.31, GNU C library版本2.10.1, 文件系统ext4.
  • 标准I/O流buffer的默认大小是由具体的C函数库实现决定的, 比如GNU C library就使用st_blksize作为默认大小. 每个流的buffer是在创建好流之后, 第一次调用标准I/O库函数对流进行操作时通过malloc()函数分配的. (参见《APUE》5.4节与5.12节)
  • BUFSIZ是定义在<stdio.h>头文件中的宏.
  • st_blksize是"struct stat"中的成员, 通过stat(2)函数获得.
  • _IO_buf_end以及_IO_buf_base是"struct _IO_FILE"中的成员, "struct _IO_FILE"的定义通常在<libio.h>中. 其实在<stdio.h>中可以看到"typedef struct _IO_FILE FILE;", 也就是我们经常使用的FILE指针指向的结构体了.
  • SO_RCVBUF是socket的选项名, 可以通过getsockopt()函数获得大小, 以及setsockopt()设置大小. 后同. (参见《UNP》2.11节与7.5节)
  • UDP类型的socket实际上是不存在buffer的, 这里的大小只是用来约束数据报的最大长度. (参见《UNP》2.11节)

参考资料:
  • W. Richard Stevens and Stephen A. Rago. Advanced Programming in the UNIX Environment, 2/e.Addison-Wesley Professional, June 17, 2005, ISBN 0201433079.
  • W. Richard Stevens, Bill Fenner, and Andrew M. Rudoff. UNIX Network Programming, Volume 1: The Sockets Networking API, 3/e. Addison-Wesley Professional, November 21, 2003, ISBN 0131411551.
  • Helali Bhuiyan, Mark McGinley, Tao Li and Malathi Veeraraghavan. TCP Implementation in Linux: A Brief Tutorial. Available online from http://www.ece.virginia.edu/mv/research/DOE09/publications/TCPlinux.pdf




论坛徽章:
0
2 [报告]
发表于 2010-06-24 07:16 |只看该作者
补充一下,上面的一些buffer是可以改变大小的。这些只是原作者测出来他的机器上的值而已,仅供参考。谁拿来当不变的真理,出问题本人不负责,只是转贴而已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP