C语言文件操作
一、对应函数
- fprintf
fprintf(stdout, "hello, %s", "world");
- sprintf
char buf[20];
sprintf(buf, "hello, %s", "world");
- 文件缓冲区大小
FILE *fp = stdin;
char str[20];
scanf("%s", str);
printf("size is %d", fp->_ftr - fp->_base);
二、缓存分类
2.1 全缓存
全缓存只针对于文件,包括输出重定向到文件 1>log.txt
。
全缓存只有三种情况下会刷新缓存区:
- 达到最大内存 \(2^{12}\)
- 程序正常结束
- fflush 刷新缓存
fflush(stdout);
2.2 行缓存
行缓存针对于控制台输入输出。比如 stdin
和 stdout
。
行缓存有四种情况,比全缓存多一种,即:
- 遇到
\n
换行符的时候会情空缓存
2.3 不缓存
不缓存的例子是 stderr
。
三、读写文件
读写文件的例子有:
#include <perror.h>
FILE *fp = fopen(argv[1], 'r');
if(NULL == fp) {
perror("fail to open");
return -1;
}
while(1) {
ch = fgetc(fp);
if(EOF == ch)
break;
fputc(ch, stdout);
}
-
fread/fwrite
- 读取/写入对象的指针首地址
- 一个对象的大小
- 对象个数
- 要被读取/写入的流
-
fseek
- 文件流指针
- 偏移量,大于 0 往后,小于 0 往前
- 偏移起点
- SEEK_SET:开始
- SEEK_CUR:当前
- SEEK_END:结束