fread和read的区别,验证fread是带缓存的
2015-11-10 21:26
316 查看
fread是c标准库函数(调用read),read是unix系统下的系统调用;fread是带缓存的,read是不带缓存的;
验证如下:
采用fread一个一个字节读取文件,gdb查看什么时候调用read读取磁盘?
fread第二次调用read时的断点情况:
以上验证可以看出fread是带缓存的,第一次调用read系统函数读取了4KB内容进行了缓存,但只返回一个字节给调用者。
验证如下:
采用fread一个一个字节读取文件,gdb查看什么时候调用read读取磁盘?
#include <stdio.h> #include <stdlib.h> #include <errno.h> int main() { FILE *file_error = fopen("50M_tvgw-1.ts", "rb"); if (NULL == file_error) { printf("fopen error:%d:%s\n", errno, strerror(errno)); return -1; } char file_ebuf[188] = {0}; int j = 0; while (0 != fread(file_ebuf, 1, 1, file_error)) { j++; printf("j=%d\n", j); } return 0; }
fread第二次调用read时的断点情况:
j=4093 j=4094 j=4095 j=4096 Breakpoint 1, 0x0000003f71ada350 in read () from /lib64/libc.so.6 (gdb) bt #0 0x0000003f71ada350 in read () from /lib64/libc.so.6 #1 0x0000003f71a711e8 in _IO_new_file_underflow () from /lib64/libc.so.6 #2 0x0000003f71a70b88 in _IO_file_xsgetn_internal () from /lib64/libc.so.6 #3 0x0000003f71a66a72 in fread () from /lib64/libc.so.6 #4 0x00000000004006bd in main () at fread_test.c:16
以上验证可以看出fread是带缓存的,第一次调用read系统函数读取了4KB内容进行了缓存,但只返回一个字节给调用者。
相关文章推荐
- 希尔排序
- HDU2068 RPG的错排
- 程序路径的操作
- iOS方法类:CGAffineTransform的使用大概
- nfs服务配置
- 块设备驱动1—用内存模拟磁盘
- lightoj--1410--Consistent Verdicts(技巧)
- 一些拿来即用的Web功能网站
- oracle触发器
- UI第一天:UIView及其⼦类
- lightoj--1410--Consistent Verdicts(技巧)
- oracle函数大全
- XCode使用二:Xcode快捷键整理
- [kuangbin带你飞]专题一 简单搜索D - Fliptile(POJ 3279)
- http常见错误
- hdu1160 FatMouse's Speed (求最长严格下降子序列路径)
- iOS 中json数据用法
- POJ 3278-Catch That Cow(bfs)
- 9.5 保护方法调用
- muduo库阅读(19)——日期类