三类读写函数

一类:行缓存 ,遇到换新行(\n),或者写满缓存时,即调用系统调用函数

  • 读:fgets,gets,printf,fprintf,sprintf
  • 写:fputs,puts,scanf

 二类:无缓存 只要用户调这个函数,就会将其内容写到内核中

stderr

 三类:全缓存 只有写满缓存再调用系统调用函数

  •  读:fread
  •  写:fwrite

 行缓存的读写函数fgets和fputs

 char *fgets (char *s, int size,FILE *stream)

  • 第一个参数:缓存,即读到哪里去
  • 第二个参数:读多少个字节
  • 第三个参数:从什么地方读
  • 返回值:若成功则为s(缓存的地址),若已处文件尾端或出错则为null

 int fputs(const char *s,FILE *stream);

  • 第一个参数:缓存,即写什么内容
  • 第二个参数:写到哪里去
  • 若成功则为非负值,若出错则为EOF -1 。

 

 

 注:前面说:“行缓存 ,遇到换新行(\n),或者写满缓存时,调用系统调用函数。”在这并没有达到前两个要求,是因为fclose的作用---关闭一个文件流,使用fclose就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。

 

注: 这里之所以加上fseek移动光标至writeBuff的头部,是因为fputs读取时本身有偏移量,在写入时,本身光标指针偏移到了最后面。

刷新缓存函数

 fluash(FIFE *fp) --- 把库函数中的缓存内容强制写到内核中。

调整读写位置指针函数: 

fseek()参数与lseek是一样的但是返回值不一样

lseek的返回值是:当前文件的位置指针值;

  •  fseek()的返回值是:成功返回0,失败返回-11;
  • rewind(FILE *fp) 用于设定流的文件位置指示为文件开始,该函数调用成功无返回值。
  • rewind()等价于(void)fseek(fp 0, SEEK_SET);
  • ftell(FILE *fp)

 用于取得当前的文件位置,调用成功则为当前文件位置指示,若出错则为-1L;

 行缓存的读写函数gets和puts

char *gets(char*s);

int puts(constchar *s);

 gets 与fgets的区别:

  • gets()时不能指定缓存的长度,这样就可能造成缓存越界(如若该行长于缓存长度),写到缓存之后的存储空 间中,从而产生不可预料的后果;
  • gets()只能从标准输入中读;--- stdout中
  • gets()与fgets()的另一个区别是:gets()并不将新行符存入缓存中, fgets 将新行符存入缓存中;

 puts 与fputs的区别:

  • puts()只能向标准输出中写;
  • puts()与fputs()的另一个区别是: puts 输出时会添加一个新行符,fputs不会添加;

 fprintf、printf、sprintf 行缓存的函数

  • int fprintf(FILE *stream,”字符串格式”)
  • fprintf可以输出到文件中,也可输出到显示器, printf 只能输出到显示器中。
  • intsprintf(str *, “字符串格式”) 输出内容到一个字符串中
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值