曾经被问到的一个问题:大文件该怎么读写
2009-08-12 14:55
260 查看
bigfile.c #include <stdio.h> int main(int argc,char argv[]) { FILE *fp1,*fp2; char buf[1024]; int nbytes; if(argc!=3) { printf("wrong command/n"); exit(1); } if((fp1=fopen(argv[1],"rd"))==NULL) { perror("fail to open"); exit(2); } if((fp2=fopen(argv[2],"rd"))==NULL) { perror("fail to open"); exit(3); } //开始复制文件,文件可能很大,缓冲区一次装不下,所以使用一个循环进行读写 while((n=fread(buf,sizeof(char),1024,fp1))>0) { buf ='/0'; if(fwrite(buf,sizeof(char),n,fp2))==-1) { perror("fail to write"); exit(4); } } if(n==1) { perror("fail to read"); exit(5); } fclose(fp1); fclose(fp2); } test: #gcc -o bigfile bigfile.c #./bigfile testsrc.txt testdes.txt
修改流的缓冲区大小:
相关函数:setbuffer, setlinebuf, setbuf
表头文件:#include <stdio.h>
定义函数:int setvbuf(FILE *stream, char *buf, int mode, size_t size)
函数说明:在打开文件流后,读取内容之前,调用setvbuf()可以用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小, 参数mode有下列几种
_IONBF 无缓冲IO
_IOLBF 以换行为依据的无缓冲IO
_IOFBF 完全无缓冲IO,如果参数buf为NULL指针,则为无缓冲IO
返回值 :无
疑问:
fread是全缓冲的。
Linux默认分给fread用的缓冲区大小?1024?4096?如何测试?
其它环境呢?
相关文章推荐
- php中,高并发状态下文件的读写 (解决多线程同时读写一个文件的问题)
- PHP解决多线程同时读写一个文件的问题
- PHP解决多进程同时读写一个文件的问题
- fopen()函数以"a+"方式打开一个不存在的文件后读写出现问题
- 一个Download.jsp文件 (采用文件流读写方式。可以防止doc.excl等文件打开时乱码问题)
- C#读写EXCEL源码提示“office检测到此文件存在一个问题。为帮助保护您的计算机,不能打开此文件。 ”的解决
- PHP解决多线程同时读写一个文件的问题
- java字节流,字符流问题怎么判断一个文件要用字节流还是用字符流
- 写代码来解决多进程/线程同时读写一个文件的问题
- 多个地方同时向一个文件读写的互斥问题解决方案
- QT怎么给一个文件设置读写权限
- 解决多线程同时读写一个文件的问题
- 一个properties文件读写组件类,解决java自带的properties文件处理薄弱问题
- 关于一个页面的tab切换整体页面刷新而tab标签处是同一个文件怎么做焦点的问题
- 代码来解决多进程/线程同时读写一个文件的问题。
- 现在有空了,回来解决四年前uboot 读写fat 分区的一个txt文件问题
- 苹果p12文件--一个苹果证书怎么多次使用(蛋疼,这些问题只有和其他企业合作才会遇到,别人的账号不可能给你,蛋疼....)
- PHP解决多进程同时读写一个文件的问题
- php如何解决多线程同时读写一个文件的问题
- 写代码来解决多进程/线程同时读写一个文件的问题。