feof:判断流指针是否已到文件结尾
int feof(FILE *stream);
①功能:判断当前参数stream的文件流指针是否到达文件结尾。如果到达文件结尾则返回真,否则返回假。
注意:该操作一定要在一次IO操作之后判断。
②参数:stream ---- 要判断结尾的文件流对象
③返回值:成功到达结尾 --- 真;否则 --- 假。
feeror
int ferror(FILE *stream);
①功能:监测一个流是否出错,并清除错误标志位
②参数:stream ---要检查其错误状态的流
③返回值:流处于错误状态,返回 1
;如果流没有错误,返回 0
fseek()
int fseek(FILE *stream, long offset, int whence);
调整读写指针的位置
①功能:将stream流文件中的文件指针从whence位置开始,偏移offset字节的长度。
②参数:stream :要移动文件指针的目标文件流对象。
offset:要在文件内偏移的距离,单位字节:如果值为整数,则向文件末尾偏移;如果值为负数,则向文件开头偏移。
whence :偏移的起始位置,由系统定义的三个宏开始:SEEK_SET --- 文件的开头位置;SEEK_CUR --- 文件的当前位置;SEEK_END --- 文件的末尾位置
③返回值:成功---返回 0;失败--- -1
注意:不支持设备文件,一般用于普通文件。
ftell()
long ftell(FILE *stream); rewind(fp);
①功能:获取当前文件流指针的具体位置,一般以文件开头到当前指针的字节数为返回值。
②参数:stream 要返回指针距离的文件流对象;
rewind:文件流指针的复位,等效于:fseek(stream, 0L, SEEK_END);
③返回值:成功---返回获取到的距离长度,单位是字节;失败 ---返回-1。
stdin:标准输入
stdout:标准输出
stderr:标准错误输出。程序中出现错误,不对数据缓存,直接刷新
缓冲区
行缓冲
大小1k,主要用于人机交互,行缓存多是关于终端的一些操作。
刷新条件:①遇到 '\n' ;②缓冲区满;③程序正常结束;④上面的条件都不满足,但想要显示数据,就调用fflush()函数。 ----fflush(stdout);
全缓冲
主要针对文件的写操作,大小为4k(4096)
刷新条件:①缓存区满;②程序正常结束;③fflush ----fflush(fp);
无缓冲
大小为0k,主要用于出错处理信息的输出,不对数据缓存直接刷新
文件IO
操作系统为了方便用户使用系统功能而对外提供的一组系统函数,称之为 系统调用,其中文件IO属于系统调用,只能在Linux上使用。一般都是对设备文件操作,也可以对普通文件进行操作。
特性:
(1)没有缓存区 ---- 一个基于Linux内核的没有缓存的IO机制
(2)操作对象不在是流,而是文件描述符 FILE* int 0-1023
(3)文件描述符:内核每打开一个文件就会获得一个文件 描述符,每个程序在启动的时候操作系统默认为其打开。三个描述符与流对象匹配:
0 ==>STDIN_FILENO === stdin
1 ==>STDOUT_FILENO == stdout
2 ==>STDERR_FILENO == stderr
stdin,stdout,stderr,===>FILE*
步骤:
打开;读写;关闭 ------ open;read/write;close
open
int open(const char *pathname, int flags,int mode);
可以操作任意位置的文件,但是要写对文件路径
①功能:获得一个文件描述符
②参数:pathname:文件名;
flag:
O_APPEND:追加,跳转到文件指针的最后
O_CREAT:有新建文件的意思
O_TRUNC:清空文件
O_RDONLY :只读
O_WRONLY:只写
O_RDWR:读写O_EXCL:需要和O_CREAT同时使用
O_NOCTTY:不是终端设备
③返回值:成功返回文件描述符;失败返回-1
w O_WRONLY|O_CREAT|O_TRUNC
w+ O_RDWR|O_CREAT|O_TRUNC
r O_RDONLY
r+ O_RDWR
a O_WRONLY|O_CREAT|O_APPEND
a+ O_RDWR|O_CREAT|O_APPEND
write
ssize_t write(int fd, const void *buf, size_t count);
①功能:通过文件描述符向文件中写一串数据
②参数:fd:文件描述符;buf:要写入文件的字符串的首地址;count:要写入字符的个数
③返回值:成功---返回实际写入字节数,>=0都是对的;失败--返回 -1
read
ssize_t read(int fd, void *buf, size_t count);
①功能:通过文件描述符读取文件中的数据
②参数:fd:文件描述符;buf:存放数据空间的首地址;count:要读到数据的个数
③返回值:成功--返回实际读取到的字节数;失败--返回 -1
lseek
off_t lseek(int fd, off_t offset, int whence);
会覆盖掉原来的内容
①功能:定位光标的位置
②参数:fd:文件描述符;off_t :偏移量, long 类型,有符号
③返回值:成功---返回偏移量;失败---返回-1