关于Linux编程3:fread/fwrite/流的定位/文件IO
流的定位
1. 概念:
设置流的偏移量
2. 偏移量的设置:
1. fseek
原型:int fseek(FILE *stream, long offset, int whence);
功能:设置流的偏移量的标识
参数:stream:文件流指针offset:偏移量> 0 向后偏移 < 0 向前偏移whence:标识SEEK_SET 文件开头SEEK_CUR 当前位置SEEK_END 文件末尾
返回值:成功返回0 失败返回-1
2ftell
原型:long ftell(FILE *stream);
功能:获得流的偏移量
参数:stream:文件流指针
返回值:成功返回流的偏移量
3rewind
原型:void rewind(FILE *stream);
功能:将流重新定位到开头
1从终端输入一个文件名,获得文件的长度
2从bmp文件中读取图片的宽度和高度
文件IO
1.概念
- 标准IO是有缓存的IO,文件IO没有缓存,适合于通信、硬件设备操作
- 标准IO是库函数,文件IO是系统调用
2.系统调用与库函数
- 系统调用:是Linux内核中的代码,只能在Linux系统中使用
- 库函数:是对系统调用的封装,可以在不同的操作系统中安装并使用,库函数最终还是要调用系统 调用完成对应功能
3.文件IO函数接口
1. 函数接口:
标准IO 文件IOfopen openfclose closefgetc/fputc read/writefgets/fputsfscanf/fprintffread/fwritefseek/ftell/rewind lseek
2. 文件打开:
原型:int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);
功能:打开文件获得操作文件的文件描述符
参数:pathname:要打开的文件路径flags:打开文件的标志,必须包含三者之一O_RDONLYO_WRONLYO_RDWR O_CREAT 文件不存在创建(注意要给定创建文件的权限)O_TRUNC 文件存在截断为0(清0)O_APPEND 追加O_EXCL 文件存在报错
返回值:成功返回新文件描述符失败返回-1
注意:
- 有三个特殊的文件描述符:标准输入(0)、标准输出(1)、标准错误(2)
- 文件描述符特点:
- 非负整数
- 取尚未被占用的最小的非负整数
- 文件描述符是有上限的,到达上限后再打开会报错误
3. 关闭文件描述符
原型:int close(int fd);
功能:关闭文件描述符
4标准IO对应的文件IO的打开方式( 0664代表操作权限 rdx/rdx/rdx)
标准IO | 文件IO |
r | O_RDONLY |
r+ | O_RDWR |
w | O_WRONLY | O_CREAT | O_TRUNC , 0664 |
w+ | O_RDWR | O_CREAT | O_TRUNC, 0664 |
a | O_WRONLY | O_APPEND | O_CREAT, 0664 |
a+ | O_RDWR | O_APPEND | O_CREAT, 0664 |
5. 文件IO读写
1. write
原型:ssize_t write(int fd, const void *buf, size_t count);
功能:向文件描述符中写入buf指向的count个字节的数据
参数:fd:文件描述符buf:要写入的数据空间首地址count:要写入的字节数
返回值:成功返回实际写入的字节数失败返回-1
ex: