嵌入式Linux学习 -- 软件编程3
四、IO
3. 标准IO
5. 文件的打开
9. fwrite
- 原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
- 功能:
向流中写入ptr指向的nmemb个对象,每个对象size个字节
- 参数:
ptr:指向数据空间的首地址
size:写入的每个对象的大小
nmemb:写入对象的个数
stream:文件流指针
- 返回值:
成功返回实际写入对象的个数,失败返回0
10. fread
- 原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE*stream);
- 功能:
从流中读取nmemb个对象到ptr指向的空间中,每个对象size个字节
- 参数:
ptr:存放数据空间的首地址
size:读取对象的字节大小
memb:读取对象的个数
stream:文件流指针
- 返回值:
成功返回读到对象的个数,失败或者读到文件末尾返回0
通过fread和fwrite实现图片的拷贝
5. 流的定位
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
2. ftell
- 原型:long ftell(FILE *stream);
- 功能:
获得流的偏移量
- 参数:
stream:文件流指针
- 返回值:
成功返回流的偏移
3. rewind
- 原型:void rewind(FILE *stream);
- 功能:
将流重新定位到开头 rewind == feek(filename, 0, SEEK_SET)
通过 fseek 和 ftell 实现获取文件的长度
4. 文件IO
1. 概念
1. 标准IO是有缓存的IO,文件IO没有缓存,适合于通信、硬件设备操作
2. 标准IO是库函数,文件IO是系统调用
2. 系统调用与库函数
1. 系统调用
是Linux内核中的代码,只能在Linux系统中使用
2. 库函数
是对系统调用的封装,可以在不同的操作系统中安装并使用,库函数最终还是要调用系统调用完成对应功能
3. 文件IO的接口
1. 接口函数
标准IO 文件IO
fopen ------------------------------------ open
fclose ------------------------------------- close
fgetc, fgets, fscanf, fread / fputc, fputs, fprintf, fwrite ---------------- read / write
fseek / ftell / rewind -------------------------------------- lseek
2. open
- 原型:
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
- 功能:
打开文件获得操作文件的文件描述符
- 参数:
pathname:要打开的文件路径
flags:打开文件的标志,必须包含三者之一
O_RDONLY O_WRONLY O_RDWR
O_CREAT 文件不存在创建(注意要给定创建文件的权限)
O_TRUNC 文件存在截断为0(清0)
O_APPEND 追加
O_EXCL 文件存在报错
- 返回值:
成功返回新文件描述符,失败返回-1
1. 有三个特殊的文件描述符:标准输入(0)、标准输出(1)、标准错误(2)
2. 文件描述符特点:
非负整数
取尚未被占用的最小的非负整数
文件描述符是有上限的,到达上限后再打开会报错
3. close
- 原型:int close(int fd);
- 功能:
关闭文件描述
4. 文件的打开
标准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 |