feof:检测文件是否到达结尾
ferroe:检测文件是否发生错误
一、标准IO fseek定位:
SEEK_END指向后继续加会扩大文件返回值:
成功: 返回 0
失败: -1;
1.ftell:long ftell(FILE *stream);rewind(fp)
功能:获取当前文件流指针的具体位置,一般以文件开头到当前指针的字节数为返回值。
参数:stream 要返回指针距离的文件流对象
返回值:成功 获取到的距离长度,单位是字节 失败 -1;
2.rewind() 等效于:fseek(stream,0L,SEEK_SET) (用于文件复位)
二、缓冲区:
1.行缓冲:1k, terminal,主要用于人机交互stdout
刷新条件: 1.遇到\n刷新
2.缓存区满刷新
3.程序结束刷新
4.fflush刷新 fflush(stdout);
2.全缓冲:4k, 主要用于文件的读写 对普通文件进行标准IO操作,建立的缓存一般为全缓存
刷新条件与行缓冲类似,但不能通过识别\n 刷新
3. 无缓冲:0k 主要用于出错处理信息的输出 stderr 不对数据缓存直接刷新
三、文件IO
1. 操作系统为了方便用户使用系统功能而对外提供的一组系统函数,称之为系统调用。其中有一个文件IO,一般都是对设备文件操作,当然也可以对普通文件进行操作。(其本质是一个基于Linux内核的没有缓存的IO机制)
2.特性:1、没有缓存区2、操作对象不再是流(FILE*),而是文件描述符(int 0-1023)3、文件描述符(内核每打开一个文件就会获得一个文件描述符)
3.一般步骤: open - read/write -close
4.open:打开或创造一个文件 int open(const char *pathname, int flags,int mode)
flags标签:
如果创造标签为creat,则需要加权限
成功返回 文件描述符 失败返回-1
5.write:通过文件描述符向文件中输入字符串 ssize_t write(int fd, const void *buf, size_t count)
fd为文件描述符,buf为要写入文件的字符串首地址 ,count为写入字符的个数,一般为buf有效长度
返回值:成功返回实际写入的个数 失败返回-1
6.read:通过文件描述符读取文件中的数据ssize_t read(int fd, void *buf, size_t count)
fd为文件描述符,buf为存放数据的空间首地址 count要读到的数据个数
返回值:成功返回读到的数据大小,单位为字节 失败返回-1 读到文件结尾返回0
7.lseek:与fseek相似off_t lseek(int fd, off_t offset, int whence)
offset 偏移量 正:向后偏移 负:向前偏移 零:不偏移
返回值: 成功返回偏移量 失败返回-1 在原本位置上有数据写为覆盖