标准IO之fopen/fclose/fgets/fputs

1. 标准IO与文件IO的对应函数

文件IO—标准IO
open ---- fopen
close ---- fclose
lseek ---- fseek, rewind
read ---- 读写函数比较多(分三类,全缓存、行缓存和无缓存)
write

2. fopen函数

FILE *fopen (const char path, const charmode);

返回值:FILE * 文件流指针,文件流指针类似于文件IO 中的文件描述符,定义成struct_IO_FILE,在/usr/include/libio.h ,里面包含读写缓存的首地址、大小、位置指针等。

标准的输入流:stdin 0

标准的输出流:stdout  1

标准的出错流:stderr 2

Mode:类似于文件IO的flag
标准IO之fopen/fclose/fgets/fputs
mode整理如下:
Ø b:二进制文件
Ø r: 只读方式打开文件,文件必须存在;
Ø w或a:只写方式打开文件,文件不存在则创建;
区别: w等价O_TRUNC,a等价O_APPEND;

Ø +:读写方式打开文件,文件必须存在;

例:以读写方式打开一个文件,该文件必须存在: r+
以追加方式打开一个文件,若文件不存在,则创建: a或a+

fopen创建的文件权限:0666 & (~umask)

3. fclose
int fclose(FILE *stream)
Ø fclose()调用成功返回0,失败返回EOF,并设置errno
Ø 在该文件被关闭之前,刷新缓存中的数据。如果标准I / O库已经为该流自动分配了一个缓存,则释放此缓存。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//fgets()/fputs()行缓存(遇到’\n’或者缓存存满才会写入内核中)

1. 标准IO的读写函数,分三类
a. 行缓存:遇到新行符(\n)或写满缓存时,即调用系统调用函数
读:fgets, gets, printf, fprintf,sprintf
写:fputs, puts,scanf
一个字符的读写,是否是行缓存?
读:fgetc, getc, getchar
写:fputc, putc,putchar
b. 无缓存:只要用户调这个函数,就会将其内容写到内核中
c. 全缓存:只有写满缓存再调用系统调用函数
读:fread
写:fwrite

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

3. fputs
intfputs(const char *s,FILE *stream);
第一个参数:缓存,即写什么内容
第二个参数:写到哪里去
若成功则为非负值,若出错则为EOF -1 。

////////////////////////////////////////////////////////////////////////////////////////////////////
原文:https://blog.****.net/wenwen111111/article/details/57483462
原文:https://blog.****.net/wenwen111111/article/details/57454888