目录
- IO库函数接口
- fopen
- fwrite
- fread
- fseek
- fclose
- 实例
- 学习系统调用IO接口
- 探讨IO操作句柄
- 重定向实现
IO库函数接口
fopen
file *fopen(cosnt char *path, const char *mode);
path:要打开的文件路径名称; mode:“r”,“r+”,“w”,“w+”,“a”,“a+”,“b”
r:只读; r+:可读可写;
w:只写,文件不存在则创建新文件; w+:可读可写,不存在则创建新文件;
a:追加只写(总是将数据写入文件末尾(其他则是覆盖写),不存在则创建新文件);a+:读和追加写,打开文件后从起始读,但是写总是在末尾,不存在则创建新文件;
b:对文件数据进行二进制操作
返回值:失败返回NULL;成功返回一个文件流指针FILE*
fwrite
size_t *fwrite(cosnt void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr:要写入文件的数据的空间地址;
size:块大小;nmemb:块个数;两个相乘为总体要操作数据大小。
stream:操作句柄–fopen返回的文件流指针;
返回值:实际写入文件的块个数
fread
size_t *fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr:一块缓冲区内存空间的地址,用于存放读取的数据
size:块大小;nmemb:块个数;
stream:操作句柄–fopen返回的文件流指针
返回值:成功返回读取到完整块个数;出错返回0;读取到文件末尾返回0,读取的数据不足一块也返回0;
建议:块大小为1,块个数为操作数据长度,否则若读取一块数据50字节,但是实际只读取了40字节的时候也会返回0,通过返回值无法确定是否已经读取到的数据
需要通过其他判断是哪个出错,feof判断读取到文件末尾,ferror判断读取数据是否出错。
fseek
int fseek(FILE *stream, long offset, int whence);
–跳转文件读写位置
stream:操作句柄-打开文件返回的文件流指针
offset:相对起点开始偏移量(偏移量可以是负数–正数向后,负数向前)
whence:相对起点–SEEK_SET-起始位置;SEEK_CUR-当前位置;SEEK_END-末尾位置
返回值:成功返回0;失败返回-1
fclose
int fclose(FILE *fp);
–关闭文件,释放资源