- printf()
- int printf(const char *format, …)//输出到标准IO端
- int fprintf(FILE *stream, const char *format,…)//指定输出到一个流stream中
- int sprintf(char *str, const char *format,…)//指定输出到一个字符串中
- int atoi(char *ch)//将字符串转换为整型
- int snprintf(char *str, size_t size, const char *format…)//防止溢出size就是str的大小
- scanf()
- int scanf(const char *format,…)
- int fscanf(FILE *stream, const char *format,…)//从流中获得
- int sscanf(const char *str, const char *format,…)//从字符串中获得
- 文件位置指针—指向当前文件读取的位置,所在位置是当前位置,思考下面这个问题
- 在一个文件中,我们利用fopen()打开文件后,用fputc(fp)读取10次,而后通过fgetc(fp)是否能得到输入那10次的数据?
- 答案显然是否定的,因为,其文件指针在fputc过后已经移动到了输入后的位置
- fseek()
- int fseek(FILE *stream, long offset, int whence)
- 指定stream流,偏移量offset,相对位置指的是从当前字节向前走/向后走多少个字节,whence有几个选项分别是SEEK_SET文件首,SEEK_CUR文件当前位置,SEEK_END文件尾,返回值仅表示当前是否成功
fseek(fp, 0, SEEK_SET);
fseek(fp, -10,SEEK_CUR);
- 当然也可以完成空洞文件
- 什么是空洞文件
- 空洞文件中充斥着部分或者全部ASCII码为0的特殊数值
- ftell()
- long ftell(FILE *stream)
- 读取文件指针当前的位置
- 如何获取文件大小
fseek(fp, 0, SEEK_END);
printf("%ld", ftell(fp));
- rewind()
- void rewind(FILE *stream)
- 不论文件指针在哪,直接将指针放在文件初始位置
- fflush()
#include<stdio.h>
#include<stdlib.h>
int main(){
int i;
printf("Before");
while(1);
printf("After");
exit(0);
}
- 以上案例是否能够打印出before?—不可以—原因就是\n才会使得缓冲区进行刷新
- fflush()就是可以强制刷新缓冲区
- int fflush(FILE *stream)
- 如果你需要所有数据都刷新则只需要fflush(NULL)即可
- 缓冲区的作用
- 行缓冲
- 换行时候刷新,满了的时候刷新,强制刷新(标准输出是这样的,因为是终端设备)
- 全缓冲
- 满了的时候刷新,强制刷新(默认,只要不是终端设备)
- 无缓冲
- 如stderr,有信息立马刷新,需要立即输出的内容
- 缓冲区的修改
- 如何完整的获得一行呢?—getline
- 调用格式上需要注意,要在文件最前面或者make文件中加入#define _GNU_SOURCE
- ssize_t getline(char **lineptr, size_t *n, FILE *stream)
- 从stream中读取完整的一行line,会将当前txt一行的首地址存放在lineptr这个一级指针中去,因此,第一个指针并非二级指针,而是一级指针的地址,方便存放后续每一行txt的字符串的首地址,n就是表示当前这一行的所占大小,因为不确定类型所以用size_t
- 如果该函数使用成功则返回读取的字符个数,包含分隔符,但是不包含空字符。如果返回-1则表示失败
- 经典调用格式
FILE *fp = NULL;
char *ptr = NULL;
size_t n = 0;
while (1)
{
if(getline(&ptr, &n, fp) < 0){
break;
}
printf("%d\n", strlen(ptr));
printf("%d\n", n);
}
- 临时文件
- 用户发过来的各类临时数据,需要通过这类数据进行分析反馈
- 主要解决问题
- 两个常见函数
- char *tmpname(char *s)
- 存在危险性,因为产生临时文件和创建临时文件并不是一气呵成的,中间如果被中断打断,则会产生不良后果
- FILE *tmpfile(void)—产生匿名文件