读书人

关于open和fopen开的缓冲区最大能开到

发布时间: 2012-03-09 21:42:54 作者: rapoo

关于open和fopen开的缓冲区最大能开到多少?求高手!!!!!!!!!!
fopen()函数原型:FILE *fopen(const char *path, const char* mode);
FILE 的结构体在"stdio.h"中有定义:
struct _iobuf {
char *_ptr; //文件输入的下一个位置
int _cnt; //当前缓冲区的相对位置
char *_base; //指基础位置(即是文件的其始位置)
int _flag; //文件标志
int _file; //文件的有效性验证
int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
int _bufsiz; //文件的大小
char *_tmpfname; //临时文件名
};
typedef struct _iobuf FILE;

fopen()开缓存最大只能开到2G。

那open()函数能开多大呢?求高手!!!!!!!!!!

[解决办法]
不了解,帮顶。

ps:自己写个数据测试下差不多吧?
[解决办法]
open函数一样
可以把应用程序编译为64位,以处理超过2G的文件
[解决办法]
open返回的是文件描述符 没这些的把~
[解决办法]
fopen是标准I/O库里的接口;open是系统API(Posix中定义).
标准I/O有三种缓冲类型:全缓冲(如printf),行缓冲(如fputc),不带缓冲(如stderr流)。
可用setvbuf 设置缓冲,用fflush刷缓冲。
OS内核会有一个缓冲,open时,用O_SYNC打开时可使读写同步,即直到把内容进到磁盘才返回。
如果是32位系统标准I/O的缓冲,由进程的内存布局可知,其最多是2G。
至于内核的缓冲,可能是在某个配置文件里设置。
参考《UNIX环境高级编程》

[解决办法]
受教~楼上
[解决办法]
open返回值是size_t类型,有符号整形,用-1表示出错,参数是ssize_t类型,无符号类型,最大值比返回值要大一倍,size_t类型最大提供2G的申请,
如果需要更大的空间要用open64()
[解决办法]
OK LS
我看错了
认作read了
而且上面我回复的也写反了
没注意
见笑了
[解决办法]
open在用户空间是没有缓冲的,在内核里面有个缓冲,可以自己给设一个缓冲

fopen看你是不是使用默认的大小,还是用setbuf自己设置,书上说,默认的全缓冲大小取自s_blksize,块数据大小


[解决办法]

探讨
open在用户空间是没有缓冲的,在内核里面有个缓冲,可以自己给设一个缓冲

fopen看你是不是使用默认的大小,还是用setbuf自己设置,书上说,默认的全缓冲大小取自s_blksize,块数据大小

读书人网 >C语言

热点推荐