目录
6.fprintf、printf、sprintf 行缓存的函数
1.三类读写函数
1.行缓存,遇到换新行(\n),或者写满缓存时,即调用系统调用函数
//读:
fgets;gets;printf;fprintf;sprintf;
//写:
fputs;puts;scanf;
一个字符的读写,是否有行缓存呢?
读:fgetc;getc;getchar;
写:fputc;putc;putchar;
2.无缓存,只要用户调这个函数,就会将其内容写到内核里
stderr;
3.全缓存,只有写满缓存再调用系统调用函数
读:fread;
写:fwrite;
2.行缓存的读写函数fgets和fputs
char *fgets(char* s,int size,FILE* stream);
- 第一个参数:缓存,即读到哪里去
- 第二个参数:读多少字节
- 第三个参数:从什么地方读
- 返回值:若成功则为s(缓存的地址),若溢出文件尾端或出错则为NULL
int fputs(const char* s,FILE* stream);
- 第一个参数:缓存,即写什么内容
- 第二个参数:写到哪里去
- 返回值:若成功则为非负值,若出错则为EOF -1。
3.刷新缓存函数
ffluach(FILE* fp);
把库函数中的缓存内容强制写道内核中。
4.调整读写位置指针函数:
fseek()参数与lseek是一样的但是返回值不一样
lseek()的返回值是:当前文件的位置指针值;
- fessk()的返回值是:成功返回0,失败返回-1;
- rewind(FILE* fp)用于设定流的文件位置指示为文件开始,该函数调用成功无返回值。
- rewind()等价于 (void)fseek(fp,0SEEK_SET);
- ftell(FILE* fp)
用于取得文件当前的文件位置,调用成功则为当前文件位置指示,若出错则为-1L;
5.行缓存的读写函数gets和puts
char* gets(char* s);
int puts(const char* s);
5.1gets与fgets的区别
- gets()时不能指定缓存的长度,这样就可能造成缓存越界(若改行长于缓存长度),写道缓存之后的存储空间中,从而产生不可预料的后果;
- gets()只能从标准输入中读;
- gets()与fgets()的另一个区别时gets()并不将新行符存入缓存中,fgets()将新行符存入缓存中;
5.2puts 与fputs的区别
-
puts()只能向标准输出中写;
-
puts()与fputs()的另一个区别是: puts 输出时会添加一个新行符,fputs不会添加;
6.fprintf、printf、sprintf 行缓存的函数
-
int fprintf(FILE *stream,”字符串格式”) fprintf可以输出到文件中,也可输出到显示器。
-
printf 只能输出到显示器中。
-
intsprintf(str *, “字符串格式”) 输出内容到一个字符串中。